您的位置:首页 > 理论基础 > 数据结构算法

数据结构基础2_单链表的实现

2015-10-10 17:21 573 查看
#include<stdio.h>
#include<stdlib.h>
#include<sqlist1.h>
#define true 1
#define false 0
typedef int Status;
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}Lnode,*linklist;
void Initlist(linklist &L)
{
L=(linklist)malloc(sizeof(Lnode));
L->next=NULL;
}
void Destorylist(linklist &L)
{
free(L);
L=NULL;
}
void Clearlist(linklist &L)
{
L->next=NULL;
}
bool Listempty(linklist L)
{
if(L->next=NULL)
{
return true;
}
else
{
return false;
}
}
Status Listlength(linklist L)
{
int n=0;
Lnode *p=L->next;
int i=1;
while(p!=NULL)
{
n++;
p=p->next;
}
return n;
}
Status Getelem(linklist L,int i,ElemType &e)
{
Lnode *p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
{
return false;
}
e=p->data;
}
Status Locatelem(linklist L,ElemType e,Status compare(ElemType,ElemType))
{
Lnode *p=L->next;
int i=0;
while(p!=NULL)
{
i++;
if(compare(e,p->data))
{
return i;
}
p=p->next;
}
}
Status Priorelem(linklist L,ElemType e,ElemType &pre_e)
{
int i=0;
Lnode *p=L->next;
while(p!=NULL)
{
i=Locatelem(L,e,compare_sq);
if(i!=0&&i!=1)
{
Getelem(L,i-1,pre_e);

return true;
}
p=p->next;
}
return false;
}
Status Nextelem(linklist L,ElemType e,ElemType &next_e)
{
int i=0;
Lnode *p=L->next;
while(p!=NULL)
{
i=Locatelem(L,e,compare_sq);
if(i<Listlength(L))
{
Getelem(L,i+1,next_e);
return true;
}
p=p->next;
}
return false;
}
Status Listinsert(linklist &L,int i,ElemType e)
{
Lnode *p=L;
Lnode *s;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p&&j>i-1)
{
return false;
}
s=(linklist)malloc(sizeof(Lnode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
Status Listdelete(linklist &L,int i,ElemType e)
{
Lnode *p=L;
Lnode *q;
int j=0;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)&&j>i-1)
{
return false;
}
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return true;
}
Status visit(linklist &L)
{
printf("%d",L->data);
}
Status Listtraverse(linklist L,Status visit(linklist &L))

{
Lnode *p;
p=L->next;
while(p!=NULL)
{
if(visit(p)==0)
{
return false;
}
p=p->next;
}
}
void Createlist(linklist &L,int n)
{
L=(linklist)malloc(sizeof(Lnode));
L->next=NULL;
Lnode *p;
for(int i=n;i>0;--i)
{
p=(linklist)malloc(sizeof(Lnode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
}
void mergelist(linklist &La,linklist &Lb,linklist &Lc)
{
Lnode *pa,*pb,*pc;
pa=La->next;
pb=Lb->next;
Lc=pc=La;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pc->next;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pc->next;
pb=pb->next;
}
}
if(pa==NULL)
{
pc->next=pb;
}
else
{
pc->next=pa;
}
free(Lb);
}
<pre name="code" class="cpp">#include<iostream>
#include<stdio.h>
#include<linklist1.h>
#include<stdlib.h>
int main()
{

linklist La;
Initlist(La);
Listinsert(La, 1, 1);
Listinsert(La, 2, 2);
Listinsert(La, 3, 5);
Listinsert(La, 4, 7);
Listinsert(La, 5, 10);
Listdelete(La, 5, 10);
int len=Listlength(La);
printf("%d\n",len);
int h;
Getelem(La,2,h);
printf("%d\n",h);

Listtraverse(La, visit);
printf("\n");
linklist Lb;
Createlist(Lb,10);
Listtraverse(Lb,visit);
printf("\n");
linklist Lc;
mergelist(La,Lb,Lc);
Listtraverse(Lc, visit);
system("pause");
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: