C语言链式表爱吃窝窝头2023-11-302023-11-30//2022.9.13链式表#include <stdio.h>#include <stdlib.h>typedef struct link{ int data;//代表数据域 struct link *next;//代表指针域,指向后继元素}link;//link为节点名,每个节点都是一个link结构体//定义头指针link *L;//初始化链表void Initlink(){ L=(link*)malloc(sizeof(link));//创建首元节点 L->next=NULL;//创建头指针}//创建单链表void creatlink(int n){ link *p; Initlink(); int i; for(i=1;i<=n;i++){ p=(link*)malloc(sizeof(link)); scanf("%d",&p->data); p->next=L->next; L->next=p; }}//遍历(输出访问)void output(){ link *p; p=L->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; }}//插入void insertlink(int i,int e){ link *p,*s; p=L; int j=0; while(j<i-1&&p) { p=p->next; j++; } if(j>i-1||!p) //是否合法 { printf("插入位置不存在:\n"); exit(0); } s=(link *)malloc(sizeof(link)); //在插入地方分配内存 s->data=e; s->next=p->next; p->next=s;}//删除int dellink(int i){ link *p,*q; int j,e; p=L; j=0; while(j<i-1&&p->next){ p=p->next; j++; } if(j>i-1||!p->next) //是否合法 { printf("插入位置不存在:\n"); exit(0); } q=p->next; e=q->data; p->next=q->next; free(q); //释放已分配的内存 return e;}void main(){ int i,e,n,x; Initlink(); printf("请输入像创建的元素个数:"); scanf("%d",&n); printf("请输入元素:"); creatlink(n); printf("输出结果为:"); output(); printf("\n输入插入位置:"); scanf("%d",&i); printf("输入插入的值:"); scanf("%d",&e); insertlink(i,e); printf("输出插入后的结果:"); output(); printf("\n请输入删除的值位置:"); scanf("%d",&x); printf("返回删除的值:"); printf("%d",dellink(x));}