C语言数据结构与算法
单链表的插入,删除以及计算长度。
#include<stdio.h>
#include<stdlib.h>
typedef struct lista{
struct lista *next;
int data;
}list;
void insert(list *h);
void del(list *h);
int main()
{
int flag;
list *head=(list *)malloc(sizeof(list));
head->next=NULL;
while(1)
{
printf("/***********************************************************/\n");
printf("请选择链表操作:\n 1:插入\n 2:删除\n 3:计算长度\n 输入数字进行选择:");
scanf("%d",&flag);
if(flag==1)
insert(head);
else if(flag==2)
del(head);
else if(flag==3)
Listlength(head);
else
printf("输入有误,请重新选择!\n");
}
}
void insert(list *h)
{
int num,dat;
list *lh;
printf("请选择插入个数:\n");
scanf("%d",&num);
printf("要插入的数据:\n");
while(num--)
{
scanf("%d",&dat);
list *p=(list *)malloc(sizeof(list));
p->next=h->next;
h->next=p;
p->data=dat;
}
printf("插入后链表中的值:\n");
lh=h->next;
while(lh)
{
printf("%d ",lh->data);
lh=lh->next;
}
printf("\n\n\n");
}
void del(list *h)
{
int dat,flag;
list *lh;
printf("请输入要删除的值:\n");
scanf("%d",&dat);
lh=h;
while(lh->next)
{
if(lh->next->data==dat)
{
flag=1;
lh->next=lh->next->next;
break;
}
lh=lh->next;
}
if(flag)
{
lh=h->next;
printf("删除后链表中的值:\n");
while(lh)
{
printf("%d ",lh->data);
lh=lh->next;
}
printf("\n\n\n");
}
else
printf("链表中无匹配值\n\n\n");
}
void Listlength(list *L)
{
int num=0;
list *p;
p=L->next;
while(p)
{
num++;
p=p->next;
}
printf("\n长度为: %d\n",num);
}