#include<stdio.h>
#include<iostream>
using namespace std;
#include<windows.h>
#include<malloc.h>
#include<conio.h>
#define OK 1
#define ERROR 0
typedef int elemtype;
typedef int status;
typedef struct lnode
{
elemtype data;
struct lnode *next;
}lnode,*linklist;
status initlist(linklist &l)
{
l=new lnode;
l->next=NULL;
return OK;
}
status getelem(linklist l,int i,elemtype &e)
{
lnode *p;
p=l->next;
int j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
{return ERROR;}
else
{
e=p->data;
return OK;
}
}
status locateelem(linklist l,elemtype e)
{
linklist p;
p=p->next;
while (p&&p->data!=e)
{
p=p->next;
return OK;
}
}
status listinsert(linklist &l,int i,elemtype e)
{ linklist p;
p=l;
int j=0;
while(p&&(j<i-1))
{
p=p->next;
++j;
}
if(!p||j>i-1)
{
return ERROR;
}
else{
linklist s;
s=new lnode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
}
status elemdelete(linklist &l,int i)
{
linklist p;
p=l;
int j=0;
while((p->next)&&(j<i-1))
{p=p->next;
++j;
}
if (!(p->next)||(j>i-1))
{
return ERROR;
}
else{
linklist q;
q=p->next;
p->next=q->next;
delete q;
return OK;
}
}
void createlist_qianchafa(linklist &l,int n)
{//逆位序;
l=new lnode;
l->next=NULL;
int i;
linklist p;
for (i=0;i<n;++i)
{
p=new lnode;
cin>>p->data;
p->next=l->next;
l->next=p;
}
}
void createlist_houchafa(linklist &l,int n)
{//正序;
l=new lnode;
l->next=NULL;
linklist r=l;
int i;
linklist p;
for (i=0;i<n;++i)
{
p=new lnode;
cout<<"第"<<i+1<<"个元素:" ;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
}
void traversell(linklist l)
{
linklist p;
p=l->next;
if(p==NULL)
{printf("链表为空;");}
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}
void merge(linklist &LA,linklist &LB,linklist &LC)//算法2.16 链式有序表的合并
{
//已知单链表LA和LB的元素按值非递减排列
//归并LA和LB得到新的单链表LC,LC的元素也按值非递减排列
lnode *pa,*pb,*pc;
pa=LA->next;pb=LB->next;
LC=LA;
pc=LC;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
}
int main()
{
linklist la,lb,lc;
initlist(la);
initlist(lb);
initlist(lc);
cout<<"初始化成功\n插入La中的元素个数为:" ;
int n;
cin>>n;
cout<<"按从小到大顺序输入!\n";
createlist_houchafa(la,n);
cout<<"La=" ;
traversell(la);
cout<<"\n插入Lb中的元素个数为:" ;
int m;
cin>>m;
cout<<"按从小到大顺序输入!\n";
createlist_houchafa(lb,m);
cout<<"Lb=" ;
traversell(lb);
merge(la,lb,lc);
cout<<"\n合并后的Lc=";
traversell(lc);
getch();
}
书中伪代码弊端尽显,可结合实际情况修改,比如多个函数中"p"并没有定义就直接应用.
欢迎广大学习者参考.