链式表

//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));
}