建立单向动态链表,并对它进行插入、删除和输入等操作,包括以下任务:

1、写一个函数creat,用来建立一个动态链表,各结点的数据由键盘输入。2、写一个函数print,将上题建立的链表中各结点的数据一次输出。3、写一个函数del,用来删除动... 1、写一个函数creat,用来建立一个动态链表,各结点的数据由键盘输入。2、写一个函数print,将上题建立的链表中各结点的数据一次输出。3、写一个函数del,用来删除动态链表中一个指定的结点(由实参指定某一学号,表示要删除该项学生的结点)。4、写一个函数insert,用来向动态链表插入一个结点。5、将以上4个函数组成一个程序,有主程序先后调用这些函数,实现链表的建立、输出、删除和插入,在主程序中指定需要删除和插入的结点。请分别:1、用一个文件包含这些函数。2、把每个函数作为一个文件,然后把它们放在一个项目文件中处理 展开
 我来答
波期喵
推荐于2017-12-16
知道答主
回答量:37
采纳率:0%
帮助的人:17万
展开全部
#include<stdio.h>
#define LEN sizeof(struct number)
struct number /*定义编号和数字*/
int name;
int num;
struct number * next;
};

struct number * create() /*建立链表函数*/
{
struct number * head,* new,* tail,* p;
int count=0;
while(1)
{
new=(struct number *)malloc(LEN);
printf("input Name and Number\n");
scanf("%d %d",&new->name,new->num); /*用户输入编号和数字*/
if(new->name==0)
{
free(new);
break;
}
else if(count==0)
{
head=new;
tail=new;
}
else
{
tail->next=new;
tail=new;
}
count++;
}
tail->next=NULL;
return(head);
}

struct number * delist(struct number *head,int name) /*删除数字的函数*/
{
struct number * p0,* p1;
p1=head;
if(head==NULL)
{
printf("\nempty list!\n");
}
else
if(p1->name==name) /*找到相同编号*/
head=p1->next;
else
{
while(p1->name!=name&&p1->next!=NULL) /*逐一排查*/
{
p0=p1;
p1=p1->next;
}
if(p1->name==name)
{
p0->next=p1->next;
printf("The node is deleted\n");
}
else
printf("The node can not been foud!\n");
}
return head;
}

struct number * insert(struct number * head,struct number * new)
{ /*插入函数*/
struct number * p0,* p1;
p1= head;
if(head==NULL)
{
head=new;
new->next=NULL;
}
else
if(new->name<p1->name) /*寻找新数字适合的位置插入*/
{
new->next=head;
head=new;
}
else
{
while(new->name>p1->name)
{
p0=p1;
p1=p1->next;
}
new->next=p0->next;
p0->next=new;
}
return(head);
}

void print(struct number * head) /*打印函数*/
{
struct number * p;
p=head;
if(head==NULL) /*其实用不到*/
printf("list is empty\n");
else
while(p!=NULL)
{
printf("%d%d\n",p->name,p->num); /*打印链表内容*/
p=p->next;
}
}

struct number * find(struct number * head,struct number * new)
{ /*查询函数*/
struct number * p0,* p1;
p1= head;
if(head==NULL)
{
head=new;
new->next=NULL;
}
else
if(new->name!=p1->name) /*寻找和输入编号相同的节点,不是则往下读*/
{
new->next=head;
head=new;
}
else
{
while(new->name==p1->name)
{
printf(”find successfully!\n”);
printf(“%d %d”,p1->name,p1->num);
}

}
return(head);
}

void main() /*主函数*/
{
struct number * head,* p;
int name;
head=create(); /*往下逐一调用函数*/
print(head);
printf("Input the delete number:");
scanf("%d",&name);
head=delist(head,name);
print(head);
printf("Input the inserted name and number:");
p=(struct number *)malloc(LEN);
scanf("&d&d",p->name,p->num);
head=insert(head,p);
print(head);
printf(“Input the found name:”);
scanf(“%d”,&name);
head=find(head,p);
print(head);

}

find函数你可以不用,在主函数中将find函数也一起删掉就行了。
追问
好厉害啊~~~我想跟你学C语言~~~可以教我不?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式