经典程序|利用C语言创建数据结构中链表的遍历及其基本操作

标题在这里插入代码片利用C语言创建数据结构中链表的遍历及其基本操作 【经典程序|利用C语言创建数据结构中链表的遍历及其基本操作】笔者希望此程序希望对学数据结构或者C的朋友们提供帮助!
如有更完美的程序,请在评论区留下您宝贵的意见,咱们一起讨论,学习进步!!!

程序: #include"stdio.h" #include"malloc.h" typedef struct stu//自定义链表结点数据类型名ST和指针类型名*STU { char name[20]; //数据域 int score; struct stu *next; //结点指针域 }ST,*STU; STU jianli(int n)//建立一个由n个结点构成的单链表函数,返回结点指针类型 { int i; STU p,q,head; if(n<=0) { return(NULL); } head=(STU)malloc(sizeof(ST)); //生成第一个结点 printf("input datas:\n"); //请输入数据 scanf("%s %d",head->name,&head->score); p=head; //p作为连接下一个结点q的指针 for(i=1; iname,&q->score); p->next=q; //连接q结点 p=q; //p跳到q上,在准备连接下一个结点q } p->next=NULL; //置尾结点指针域为空指针 return(head); //将已经建立起来的单链表头指针返回 }void print(STU head)//链表的输出 { STU p=head; //从头指针出发,依次输出,直到遇到NULL结束 while(p!=NULL) { printf("%s\t%d\n",p->name,p->score); p=p->next; //p指针顺序后移一个结点 } } STU charu(STU head,int i)//插入结点 { STU s,p,q; int j=0; //查找第i个结点计数用 if(i<0) { return NULL; //参数i的值不合理 } s=(STU)malloc(sizeof(ST)); printf("input new node datas:"); scanf("%s %d",s->name,&s->score); if(i==0)//i==0表明是在第一个结点之前插入新结点 { s->next=head; //把头地址赋给s的指针域 head=s; //把s结点赋给head return(head); } q=head; //查找新结点的位置,在p和q之间 while(jnext; //把q的下一个结点赋给q } if(jnext=s; //把插入的结点地址赋给p,(连接结点) s->next=q; //把q最终的地址赋给s的指针域 return(head); } STU deletenodel(STU head,int i) { STU s,p; int j; if(i<1) return NULL; //i<1不合理 if(i==1)//要删除的结点是链表中的第一个结点 { if(head!=NULL) { s=head; head=s->next; free(s); } return(head); } s=head->next; //查找第i个结点的位置,以s标记 p=head; j=2; //从第二个结点开始 while(jnext; } if(jnext=s->next; //摘除s结点 free(s); //回收已释放的结点 return(head); }main() { STU h; int n,i; printf("input number of node:"); //请输入结点个数 scanf("%d",&n); h=jianli(n); //调用建立单链表的函数,返回值(指针)赋给h print(h); //调用输出链表的函数 printf("是否需要插入新的结点?\n是请按“1”\t否请按“0”\n"); int x; scanf("%d",&x); if(x==1) { printf("input new node number:"); //输入新结点 scanf("%d",&i); h=charu(h,i); //调用插入函数,并将返回值(指针)赋值给h print(h); } printf("是否需要删除结点?\n是请按“1”\t否请按“0”\n"); int y; scanf("%d",&y); if(x==1) { printf("which node you want delete:"); scanf("%d",&i); h=deletenodel(h,i); //调用输出链表的函数,并将返回值(指针)赋值给h print(h); } return 0; }

    推荐阅读