实验项目 3 (结构体和链表)替换实验项目 1 的 5 个菜单项目,完成要求的功能菜单第 1 项完成:创建一个仅含头结点的空链表,如果创建成功,输出创建空链表成功,返回头结点的指针,否则输出创建

实验项目 3 (结构体和链表)
替换实验项目 1 的 5 个菜单项目,完成要求的功能
菜单第 1 项完成:创建一个仅含头结点的空链表,如果创建成功,输出创建空链表成功,
返回头结点的指针,否则输出创建空链表失败,退出程序运行。
菜单第 2 项完成:依次输入一组整数,以-1 作为结束的标志,创建由这些输入数据所形
成的带头结点的单链表,返回头结点的指针,输出链表的数据信息。若输入:45,45,23,
45,54,25,-1。则生成链表:
菜单第 3 项完成:输入一个整数。将这个数插入在第 2 项建立的链表的链尾,并输出整
个链表中的数据信息。
菜单第 4 项完成:输入一个整数,删除这个数在第 3 项完成后的链表中的所有出现,并
输出删除后链表的数据信息。 菜单第 5 项完成:在第 4 项完成后,求链表中各结点数据的平均值,并输出。
(备注:由于输出链表中的数据要多次使用,可以编一输出函数,多次调用完成输出
#include<stdio.h>
#include<stdlib.h>
typedef struct node
   {
     int data;
     struct node *next;
   }Node;
Node *p1();
Node *Creat(Node *head);
void p2(Node *head);
void Put(Node *head);
Node *p3(Node *head);
Node *p4(Node *head);
void p5(Node *head);
int main()
{
   printf("1:创建一个空链表\n");
   printf("2:输入并输出链表信息\n");
   printf("3:插入一个数到链表尾部\n");
   printf("4:删除想要删掉的链表元素\n");
   printf("5:求链表中数据的平均值\n");
   int x;
   Node *head,*q,*p;
   while(1)
   {   printf("请输入1-5之间的数:\n");
       scanf("%d",&x);
       switch(x)
       {
           case 1:p1();break;
           case 2:p2(head);break;
           case 3:q=p3(head);Put(q);break;
           case 4:p=p4(head);Put(p);break;
           case 5:p5(head);break;
           default:
           exit(0);
       }
   }
}
Node *p1()
{
 Node *head;
 head=(Node *)malloc(sizeof(Node));
 if(head==NULL)
 {
  printf("创建链表失败");
  exit(0);
 }
 else
 {
  printf("创建链表成功\n");
  head->next=NULL;
 }
 return head;
}
Node *Creat(Node *head)
{
 head=p1();
 Node *q,*p;
 q=head;
 int data;
 printf("输入链表数据(-1为结束标志)\n");
 do{
  p=(Node *)malloc(sizeof(Node));
  if(p==NULL)
  exit(0);
  scanf("%d",&data);
  p->data=data;
  q->next=p;
  q=p;
 }while(p->data!=-1);
 p->next=NULL;
 return head;
}
void Put(Node *head)
{
 Node *s=head;
 while(s!=NULL)
 {
  if(s!=head&&s->data!=-1)
  printf("%d ",s->data);
  s=s->next;
 }
 free(head);
}
void p2(Node *head)
{
 Node *p;
 p=Creat(head);
 Put(p);
 printf("\n");
}
Node *p3(Node *head)
{
 Node *p,*s,*q;
 q=p=Creat(head);
 printf("输入想插入到尾部的数:\n");
 int x;
 scanf("%d",&x);
 while(p->next!=NULL)
 {
  s=p;
  p=p->next;
 }
 s->next=p;
 p->data=x;
 p->next=NULL;
 return q;
}
Node *p4(Node *head)
{
 Node *p,*s,*q,*f;
 f=q=p=p3(head);
while(f!=NULL)
 {
  if(f!=q&&f->data!=-1)
  printf("%d ",f->data);
  f=f->next;
 }
 printf("\n");
 int x;
 printf("输入想要删除的链表元素:\n");
 scanf("%d",&x);
 s=p;
 p=p->next;
 while(p!=NULL)
 {
	if(p->data==x)
 {
 	s->next=p->next;
 	free(p);
 	p=s->next;
 }
 else
 {
 	s=p;
 	p=p->next;
 }
}
return q;
}
void p5(Node *head)
{
	Node *p,*q,*s;
	int n=0,c=0;
	float ave;
	s=p=q=p4(head);
	while(s!=NULL)
 {
  if(s!=q&&s->data!=-1)
  printf("%d ",s->data);
  s=s->next;
 }
	p=p->next;
	while(p!=NULL)
	{
		n=n+p->data;
		c++;
		p=p->next;
	}
	ave=(float)n/c;
	printf("\n");
	printf("平均数为:%.2f\n",ave);
}
1:创建一个空链表
2:输入并输出链表信息
3:插入一个数到链表尾部
4:删除想要删掉的链表元素
5:求链表中数据的平均值
请输入1-5之间的数:
1
创建链表成功
请输入1-5之间的数:
2
创建链表成功
输入链表数据(-1为结束标志)
1
4
5
6
-1
1 4 5 6
请输入1-5之间的数:
3
创建链表成功
输入链表数据(-1为结束标志)
12
5
46
-1
输入想插入到尾部的数:
6
12 5 46 6 请输入1-5之间的数:

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值