已经过整理与测试,代码如下:
#include<stdio.h> #include<malloc.h> #include<stdib.h> typedef int datatype; typedef struct node { datatype data; struct node*next; }slnode; int l; int initiate(slnode**h;); int append(slnode*h); int insert(slnode*h,int n); int delete(slnode*h,int n); slnode*search(slnode*h,datatype x); void print(slnode*h); void main() { slnode*h,*s; int sel,n,x; initiate(&h); printf("请输入你的选择:1--initiate 2--append 3--insert 4--delete 5--search 6--print 7--exit\nyour choice="); scanf("%d",&sel); while(sel!=7) { if(sel==1) { initiate(&h); } else if(sel==2) { append(h); print(h); } else if(sel==3) { printf("请输入待输入的结合点个数"); scanf("%d,&n"); insert(h,n); print(h); } else if(sel==4) { printf("请输入待删除的结点个数"); scanf(%d,&n); delete(h,n); print(h); } else if(sel==5) { printf("请输入要查找的结点数据:"); scanf("%d",&x); s=search(h,x); if(s!=NULL) printf("查找成功,结点位置为:%d\n",l); } else if(sel==6) { print(h); } else printf("你的选择是错误的!\n"); printf("请输入你的选择:1--intiate 2--append 3--insert 4--delete 5--search 6--print 7--exit\nyour choice="); scanf("%d",&sel); } int initiate(slnode**h) { *h=(slnode*)malloc(sizeof(slnode)); if=(*h==NULL) { printf("初始化失败!\n"); return 0; } (*h)->next=NULL; printf("完成初始化!\n"); return 1; } int append (slnode*h) { slnode *p,*q; int n,i; datatype a[10]; if(h==NULL) { printf("单链表未初始化"); return 0; } printf("请出入单链表最初的结点shun="); scanf("%d",&n); printf("请输入各个结点数据域的值:"); for(i=0;i<n;i++) { scanf("%d",&a[i]); } p=h; for((q=slnode*)malloc(sizof(slnode)))==NULL) { printf("新结点空间申请失败!"\n); return 0; } q->data=a[i]; q->next=NULL; p->next=q; p=q; return 1; } /*删除*/ int delete(slnode*h,int n) { slnode*p,*s; int m; datatype x; p=h; m=n; while(n) { printf("请输入第%d个被删除结点的数据:",m-n+1); scanf("%d",&x); s=search(h,x); if(s==NULL) continue; p=s->next; s->next=p->next; free(p); n--; } return 1; } /*查找*/ slnode*search(slode*h,datatype x) { slnode *p; p=h; L=0; while (p->next!=NULL) { l++; if(p->next!=NULL) { L++; if(p->next->data==x) return p; p=p->next; } printf("没有要删除的结点数据!\n"); return NULL; } } /*显示输出*/ void print(slnode*h){ slnode*p; int i; p=h->next; i=0; printf("\n当前的单链表数据内容为:"); while(p!=NULL) { i==; printf("第%d个数据:%d\n",i,p->data); p=p->next; } printf("\n线性表的表长为%d\n",j) }