实现两个有序链表的合并
2016-03-28 23:31
561 查看
实现两个链表的合并
编译环境Vc 6.0
///////----------a.cpp
#include <iostream>
#include "a.h"
using namespace std;
void ListAdd(LinkList<int> *List1,LinkList<int> *List2,LinkList<int> *List3);
void Print(const int &c)
{
cout<<c<<" ";
}
int main()
{
LinkList<int> List1;
LinkList<int> List2;
LinkList<int> List3;
int i=0,j=0;
int m,n;
while(i<5)
{
cin>>m;
List1.Append(m);
i++;
}
while(j<5)
{
cin>>n;
List2.Append(n);
j++;
}
/*List1.Traverse(Print);
List2.Traverse(Print);*/
ListAdd(&List1,&List2,&List3); ////////----------函数调用,实参传的是链表的地址????
List3.Traverse(Print);
return 0;
}
void ListAdd(LinkList<int> *List1,LinkList<int> *List2,LinkList<int> *List3)/////--------函数实现,虚参为指针,指向链表的首地址
{
////函数实现部分,定义三个LinkNode指针
LinkNode<int> *p=List1->head->next,*q=List2->head->next;
LinkNode<int> *s=List3->head;
while(p!=NULL&&q!=NULL)
{
if((p->data)<(q->data))
{
s->next=p;
s=p;
p=p->next;
}
else
{
s->next=q;
s=q;
q=q->next;
}
} //////----------两个有序链表的合并部分
if(p)
{
s->next=p;
}
if(q)
{
s->next=q;
} ///////-----------如果上面的while部分结束,还有链表元素剩余,可以直接剩下的元素
}
template <class ElemType>
struct LinkNode
{
ElemType data;
LinkNode<ElemType> *next;
};
///////////----------a.h
template <class ElemType>
class LinkList
{
//类成员都为公有,便于类体外函数的访问
public :
int len;
LinkNode<ElemType> *head;
LinkNode<ElemType> *tail;
LinkList();
bool Append(ElemType &e);
void Traverse(void (*visit)(const ElemType &e)) const; ////------注意此遍历函数
//void ListAdd(LinkList<ElemType> *List1,LinkList<ElemType> *List2,LinkList<ElemType> *List3);
};
template <class ElemType>
LinkList<ElemType>::LinkList()
{
len=0;
head=tail=new LinkNode<ElemType>;
head->next=NULL;
}
template <class ElemType>
bool LinkList<ElemType>::Append(ElemType &e)
{
LinkNode<ElemType> *q;
q=new LinkNode<ElemType>;
q->data=e;
tail->next=q;
tail=q;
tail->next=NULL;
len++;
return true;
}
template <class ElemType>
void LinkList<ElemType>::Traverse(void (*visit)(const ElemType &e)) const
{
LinkNode<ElemType> *p=head->next;
while(p)
{
visit(p->data);
p=p->next;
}
}
编译环境Vc 6.0
///////----------a.cpp
#include <iostream>
#include "a.h"
using namespace std;
void ListAdd(LinkList<int> *List1,LinkList<int> *List2,LinkList<int> *List3);
void Print(const int &c)
{
cout<<c<<" ";
}
int main()
{
LinkList<int> List1;
LinkList<int> List2;
LinkList<int> List3;
int i=0,j=0;
int m,n;
while(i<5)
{
cin>>m;
List1.Append(m);
i++;
}
while(j<5)
{
cin>>n;
List2.Append(n);
j++;
}
/*List1.Traverse(Print);
List2.Traverse(Print);*/
ListAdd(&List1,&List2,&List3); ////////----------函数调用,实参传的是链表的地址????
List3.Traverse(Print);
return 0;
}
void ListAdd(LinkList<int> *List1,LinkList<int> *List2,LinkList<int> *List3)/////--------函数实现,虚参为指针,指向链表的首地址
{
////函数实现部分,定义三个LinkNode指针
LinkNode<int> *p=List1->head->next,*q=List2->head->next;
LinkNode<int> *s=List3->head;
while(p!=NULL&&q!=NULL)
{
if((p->data)<(q->data))
{
s->next=p;
s=p;
p=p->next;
}
else
{
s->next=q;
s=q;
q=q->next;
}
} //////----------两个有序链表的合并部分
if(p)
{
s->next=p;
}
if(q)
{
s->next=q;
} ///////-----------如果上面的while部分结束,还有链表元素剩余,可以直接剩下的元素
}
template <class ElemType>
struct LinkNode
{
ElemType data;
LinkNode<ElemType> *next;
};
///////////----------a.h
template <class ElemType>
class LinkList
{
//类成员都为公有,便于类体外函数的访问
public :
int len;
LinkNode<ElemType> *head;
LinkNode<ElemType> *tail;
LinkList();
bool Append(ElemType &e);
void Traverse(void (*visit)(const ElemType &e)) const; ////------注意此遍历函数
//void ListAdd(LinkList<ElemType> *List1,LinkList<ElemType> *List2,LinkList<ElemType> *List3);
};
template <class ElemType>
LinkList<ElemType>::LinkList()
{
len=0;
head=tail=new LinkNode<ElemType>;
head->next=NULL;
}
template <class ElemType>
bool LinkList<ElemType>::Append(ElemType &e)
{
LinkNode<ElemType> *q;
q=new LinkNode<ElemType>;
q->data=e;
tail->next=q;
tail=q;
tail->next=NULL;
len++;
return true;
}
template <class ElemType>
void LinkList<ElemType>::Traverse(void (*visit)(const ElemType &e)) const
{
LinkNode<ElemType> *p=head->next;
while(p)
{
visit(p->data);
p=p->next;
}
}
相关文章推荐
- 用VBScript写合并文本文件的脚本
- C#数据结构之顺序表(SeqList)实例详解
- oracle列合并的实现方法
- 使用BAT一句话命令实现快速合并JS、CSS
- Lua教程(七):数据结构详解
- SQL 合并多行记录的方法总汇
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#实现简单合并word文档的方法
- C#自适应合并文件的方法
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#定义并实现单链表实例解析
- C#数据结构之单链表(LinkList)实例详解
- Node.js实现JS文件合并小工具
- 数据结构之Treap详解
- C语言实现单链表逆序与逆序输出实例
- GridView单元格合并
- 如何合并多个 .NET 程序集
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- 【数据结构与算法】数组应用4:多项式计算Java版