#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int ELem;
typedef struct Node
{
int date;
struct Node *next;
}Node;
typedef struct Node *Linklist;
void chuangjian(Linklist *L,int n)
{
Linklist p,t;//声明结点
*L=(Linklist)malloc(sizeof(Node));//生成新结点
(*L)->next=NULL;//新结点指向空结点
t=(*L);//中间值
for(int i=0;i<n;i++)
{
/*//头插法
p=(Linklist)malloc(sizeof(Linklist));//生成新结点p
scanf("%d",&(p->date));//为新结点的date域赋值
p->next=(*L)->next;//p的后继指向(*L)的后继
(*L)->next=p;*///插入到表头
//尾插法
p=(Linklist)malloc(sizeof(Node));//生成新结点p
p->next=NULL;//p结点的后继为空
scanf("%d",&(p->date));//赋值操作
t->next = p;//将表尾终端结点的指针指向新结点
t = p;//将当前结点定义为表尾终端节点
}
}
void Tiqu(Linklist L,int i,int *e)
{
int j=1;
Linklist p;
p=L->next;
while (p&&j<i) {
p=p->next;
++j;
}
*e =p->date;
}
void shanchu(Linklist *L,int i,int *e)
{
int j=1;
Linklist p,q;
p=*L;
while (p->next&&j<i) {
p=p->next;
++j;
}
q=p->next;
*e=q->date;
p->next=p->next->next;
free(q);
}
void genggai(Linklist *L,int i,int e)
{
int j=1;
Linklist p;
p=*L;
while (p&&j<i) {
p=p->next;
j++;
}
p->next->date=e;
}
void zengjia(Linklist *L,int i,int x)
{int j=1;
Linklist p,q;
p=*L;
q=(Linklist)malloc(sizeof(Linklist));
q->next=NULL;
q->date=x;
while (p->next&&j<i) {
p=p->next;
j++;
}
q->next=p->next;
p->next=q;
}
int main(int argc, const char * argv[]) {
Linklist l,s,p,h;
int a,i,j,q,w,e,r;
printf("请输入要输入多少个数据");
scanf("%d",&a);
chuangjian(&l, a);
p=l;
s=l;
h=l;
while (l->next!=NULL)
{
l=l->next;
printf("%d\t",l->date);
}
printf("请输入要查找第几个数据\n");
scanf("%d",&i);
Tiqu(p,i,&i);
printf("要查找的数据为");
printf("%d\t",i);
printf("\n");
printf("请输入要删除第几个数据");
scanf("%d",&j);
shanchu(&p,j,&j);
printf("删除后的链表为");
while (p->next != NULL)
{
p = p->next;
printf("%d\t",p->date);
}
printf("\n");
printf("删除的数据是");
printf("%d\n",j);
printf("修改第几个位置\n");
scanf("%d",&q);
printf("修改为多少\n");
scanf("%d",&w);
genggai(&s,q,w);
printf("更改获得的链表为\n");
while (s->next != NULL)
{
s = s->next;
printf("%d\t",s->date);
}
printf("\n");
printf("添加的位置\n");
scanf("%d",&e);
printf("添加数据为多少\n");
scanf("%d",&r);
zengjia(&h,e,r);
while (h->next != NULL)
{
h = h->next;
printf("%d\t",h->date);
}
return 0;
}
单链表的增删改查功能实现C语言代码
上一篇博客写了单链表的创建(头插法,尾插法)现在写数据结构的增删改查