數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版 單鏈表源代碼
/*單鏈表的各種操作*/#include <stdio.h>#include <malloc.h>#define null 0typedef int ElemType; /* 字符型數(shù)據(jù)*/struct LNodeElemType data;struct LNode *next;void setnull(struct LNode *p);int length (struct LNode *p);ElemType get(struct LNode *p,int i);void insert(struct LNode *p,ElemType x,int i);void dele(struct LNode *p,int i);void display(struct LNode *p);int locate(struct LNode *p,ElemType x);void main()struct LNode *head,*q; /*定義靜態(tài)變量*/int select,x1,x2,x3,x4;int i,n; int m,g;char e,y; setnull(&head); /*建設(shè)鏈表并設(shè)置為空表*/ printf("請(qǐng)輸入數(shù)據(jù)長(zhǎng)度: "); scanf("%d",&n); for(i=1;i<=n;i+) printf("將數(shù)據(jù)插入到單鏈表中: "); scanf("%d",&y); insert(&head,y,i); /*插入數(shù)據(jù)到鏈表*/ display(&head); /*顯示鏈表所有數(shù)據(jù)*/ printf("select 1 求長(zhǎng)度 length()n"); printf("select 2 取結(jié)點(diǎn) get()n"); printf("select 3 求值查找 locate()n"); printf("select 4 刪除結(jié)點(diǎn) delete()n");printf("select 0 退出n"); printf("input your select: "); scanf("%d",&select); while(select!=0) switch(select)case 1:x1=length(&head);printf("輸出單鏈表的長(zhǎng)度%d ",x1); display(&head); break; case 2: printf("請(qǐng)輸入要取得結(jié)點(diǎn): "); scanf("%d",&m); x2=get(&head,m); printf("%d",x2); display(&head); break; case 3: printf("請(qǐng)輸入要查找的數(shù)據(jù): "); scanf("%d",&e); x3=locate(&head,e); printf("%d",x3); display(&head); break; case 4: printf("請(qǐng)輸入要?jiǎng)h除的結(jié)點(diǎn): "); scanf("%d",&g); dele(&head,g); display(&head); break; printf("select 1 求長(zhǎng)度 length()n"); printf("select 2 取結(jié)點(diǎn) get()n"); printf("select 3 求值查找 locate()n"); printf("select 4 刪除結(jié)點(diǎn) delete()n");printf("select 0 退出n"); printf("input your select: "); scanf("%d",&select); void setnull(struct LNode *p)*p=null;int length (struct LNode *p)int n=0; struct LNode *q=*p; while (q!=null) n+; q=q->next; return(n);ElemType get(struct LNode *p,int i)int j=1;struct LNode *q=*p;while (j<i&&q!=null) q=q->next; j+; if(q!=null) return(q->data); elseprintf("位置參數(shù)不正確!n");return 0;int locate(struct LNode *p,ElemType x)int n=0; struct LNode *q=*p;while (q!=null&&q->data!=x) q=q->next; n+; if(q=null) return(-1); else return(n+1);void insert(struct LNode *p,ElemType x,int i)int j=1; struct LNode *s,*q; s=(struct LNode *)malloc(sizeof(struct LNode); s->data=x; q=*p; if(i=1) s->next=q; *p=s; else while(j<i-1&&q->next!=null) q=q->next; j+; if(j=i-1) s->next=q->next; q->next=s; else printf("位置參數(shù)不正確!n"); void dele(struct LNode *p,int i)int j=1; struct LNode *q=*p,*t; if(i=1) t=q; *p=q->next; else while(j<i-1&&q->next!=null) q=q->next; j+; if(q->next!=null&&j=i-1) t=q->next; q->next=t->next; else printf("位置參數(shù)不正確!n"); if(t!=null) free(t);void display(struct LNode *p)struct LNode *q; q=*p; printf("單鏈表顯示: "); if(q=null) printf("鏈表為空!"); else if (q->next=null) printf("%dn",q->data); else while(q->next!=null) printf("%d->",q->data); q=q->next; printf("%d",q->data); printf("n");