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

来源:互联网 发布:图像融合算法代码 编辑:程序博客网 时间:2024/06/08 00:06
#include<stdio.h>#include<stdlib.h>#include<sqlist1.h>#define true 1#define false 0typedef 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");}


0 0
原创粉丝点击