用C语言实现链表的插入删除并计算表长度。

2025-06-22 13:23:28
推荐回答(1个)
回答1:

#include
#include

typedef struct node{
int data;
struct node *next;
}List,*Link_list;

Link_list create_list(void)
{
Link_list h=0;
Link_list tail=0;
Link_list s=0;
int data=0;
tail=h=(Link_list)malloc(sizeof(List));
h->data=0;
h->next=NULL;
printf("输入初始链表数据以 -1 结束\n");
while(1)
{
scanf("%d",&data);
if(-1==data)
{
break;
}
s=(Link_list)malloc(sizeof(List));
s->data=data;
s->next=tail->next;
tail->next=s;
tail=s;
}
return h;
}

int insert_list(Link_list h)
{
Link_list s=h->next;
Link_list front=h;
int data=0;
Link_list p=NULL;
int i=0;
int j=0;
printf("输入插入的位置\n");
scanf("%d",&i);
while(s!=NULL)
{
j++;
if(i==j)
{
break;
}
front=s;
s=s->next;
}

printf("输入插入的数值\n");
scanf("%d",&data);
p=(Link_list)malloc(sizeof(List));
p->data=data;
p->next=s;
front->next=p;
return 1;
}

int delete_list(Link_list h)
{
Link_list s=h;
Link_list p=NULL;
int i=0;
printf("输入删除的位置\n");
scanf("%d",&i);
while(s!=NULL)
{
i--;
if(i==0)
{
break;
}
s=s->next;
}
p=s->next;
s->next=s->next->next;
free(p);
return 1;
}

int length_list(Link_list h)
{
Link_list s=h->next;
int length=0;
while(s!=NULL)
{
length++;
s=s->next;
}
return length;
}

int show_list(Link_list h)
{
Link_list s=h->next;
while(s!=NULL)
{
printf("%d ",s->data);
s=s->next;
}
printf("\n");

}

int main()
{
Link_list h=NULL;
int select=0;
h=create_list();
printf("请选择功能:\n");
printf("1 - 插入\n");
printf("2 - 删除\n");
printf("3 - 表长度\n");
printf("4 - 显示表数据\n");
printf("0 - 退出\n");
while(1)
{
printf("选择功能\n");
scanf("%d",&select);
if(0==select)
{
break;
}
switch(select)
{
case 1:
insert_list(h);
break;
case 2:
delete_list(h);
break;
case 3:
printf("length = %d\n",length_list(h));
break;
case 4:
show_list(h);
break;
default :
printf("输入错误\n");
break;
}
}
}