数据结构基础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"); }