#include<stdio.h>
#include<stdlib.h>
typedef struct lian{
int date;
struct lian*netx;
}list;
int main()
{
list *head,*p,*q;
head=(list*)malloc(sizeof(list));
head->netx=NULL;
q=head;
//输入
//输入采用尾插法
printf("输入链表内的数\n");
printf("输入完毕输入-1\n");
do
{
p=(list*)malloc(sizeof(list));
scanf("%d",&p->date);
q->netx=p;
q=p;
q->netx=NULL;
}while(q->date!=-1);//输入时将链表的最后一位置为-1
//输出
for(q=head->netx;q!=NULL;q=q->netx)
{
printf("%d ",q->date);
}printf("\n");
//插入
printf("输入插入链表内的数\n");
printf("插入完毕输入-1\n");
q=(list*)malloc(sizeof(list));
scanf("%d",&q->date);
while(q->date!=-1)
{
for(p=head;p->netx->date!=-1;p=p->netx)
{
if(q->date<p->netx->date)
{
q->netx=p->netx;
p->netx=q;
break;
}
}
if(p->netx->date==-1)
{
q->netx=p->netx;
p->netx=q;
}
q=(list*)malloc(sizeof(list));
scanf("%d",&q->date);
} free(q);
//输出
for(q=head->netx;q!=NULL;q=q->netx)
{
printf("%d ",q->date);
}printf("\n");
//查找
printf("输入要查找的数\n");
printf("查找完毕输入-1\n");
int i,flag,n,j;
scanf("%d",&i);
while(i!=-1)
{
flag=1;
for(p=head->netx;p->date!=-1;p=p->netx)
{
if(i==p->date)
{
printf("yes\n");
flag=0;
break;
}
}if(flag)
{
printf("no\n");
}
scanf("%d",&i);
}
//删除
printf("输入要删除的数\n");
printf("删除完毕输入-1\n");
do
{
scanf("%d",&i);
for(p=head;p->netx!=NULL;p=p->netx)
{
if(p->netx->date==i)
{
q=p->netx;
p->netx=p->netx->netx;
free(q);
break;
}
}
}while(i!=-1);//此时将链表的最后一位-1删掉
//输出
for(q=head->netx;q!=NULL;q=q->netx)
{
printf("%d ",q->date);
}printf("\n");
//更改
printf("输入要更改的数以及更改后的数\n");
printf("更改完毕输入-1\n");
scanf("%d",&i);
while(i!=-1)
{
scanf("%d",&n);
for(p=head->netx;p!=NULL;p=p->netx)
{
if(p->date==i)
{
p->date=n;
}
}
scanf("%d",&i);
}
//输出
for(q=head->netx;q!=NULL;q=q->netx)
{
printf("%d ",q->date);
}
}
单向链表的增删改查
最新推荐文章于 2022-11-22 00:00:29 发布