当前位置: 首页 > article >正文

数据结构作业day03

main.c 创建概念菜单,stu.h中 定义学生和单链表结构体(学号,姓名,年龄)

功能1:录入学生信息采用尾插法将学生信息存入单链表。

功能2:任意位置插入一个学生

功能3:任意位置删除一个学生

功能4:将单链表逆置再输出。

link.c

#include"link.h"

Plink apply()
{
	Plink p = malloc(sizeof(Link));
	if(p==NULL)
	{
		printf("申请失败!\n");
		return NULL;
	}
	printf("申请成功\n");
	return p;
}

Plink create()
{
	Plink L = apply();
	if(L==NULL)
	{
		printf("创建空间失败!\n");
		return NULL;
	}
	L->len=0;
	L->next = NULL;
	printf("创建成功\n");
	return L;
}




void rear_insert(Plink L)
{
	int i;
	Plink t = L;
	for(i=0;i<L->len;i++)
	{
		t = t->next;
	}
	Plink p = apply();

	printf("学号:");
	scanf("%d",&p->message.id);
	printf("姓名:");
	scanf("%s",p->message.name);
	printf("年龄:");
	scanf("%d",&p->message.age);
	p->next = NULL;
	t->next = p;
	L->len++;
}

void input_link(Plink L)
{
	int i,num;
	printf("请输入学生数量:");
	scanf("%d",&num);
	for(i=0;i<num;i++)
	{
		printf("请输入第%d位同学信息:",i+1);
		rear_insert(L);
	}
}

void link_output(Plink L)
{
	int i;
	Plink t = L;
	for(i=0;i<L->len;i++)
	{
		t = t->next;
		printf("\t%d\t%s\t%d\n",t->message.id,t->message.name,t->message.age);
	}
}

void anypos_insert(Plink L,int pos)
{
	printf("%d",pos);
	printf("%d",L->len);
	if(pos<1||pos>L->len+1||L==NULL||L->len == 0)
	{
		printf("插入失败\n");
	}
	else
	{
		Plink t = L;
		int i;
		for(i=0;i<pos-1;i++)
		{
			t = t->next;
		}
		Plink p = apply();
		printf("输入插入学生的信息:");
		printf("学号:");
		scanf("%d",&p->message.id);
		printf("姓名:");
		scanf("%s",p->message.name);
		printf("年龄:");
		scanf("%d",&p->message.age);
		p->next = t->next;
		t->next = p;
		L->len++;
	}
}

void anypos_del(Plink L,int pos)
{
	if(pos<0||pos>L->len||L==NULL)
	{
		printf("删除失败\n");
	}
	else
	{
		int i;
		Plink t = L;
		for(i=0;i<pos-1;i++)
		{
			t = t->next;
		}
		Plink Q = apply();
		Q=t->next;
		t->next = t->next->next;
		free(Q);
		Q = NULL;
		L->len--;
	}

}

void reserve(Plink L)
{
	Plink t=L->next;
	Plink p=t->next;
	while(p!=NULL)
	{
		t->next=p->next;
		p->next=L->next;
		L->next=p;
		p=t->next;
	}
}

main.c

#include "link.h"
int main(int argc, const char *argv[])
{
	int ch;

	while(1)
	{
		printf("\t------系统菜单------\n");
		printf("\t1、录入学生信息,采用尾插法将信息存入单链表\n");
		printf("\t2、任意位置插入一个学生\n");
		printf("\t3、任意位置删除一个学生\n");
		printf("\t4、将单链表逆置在输出\n");
		printf("\t0、退出菜单\n");

		printf(" 请输入你的选择:");
		scanf("%d",&ch);
		Plink L = create();
		switch(ch)
		{
		case 1:
			{
				input_link(L);
				
				link_output(L);
			}
			break;
		case 2:
			{
				int pos;
				printf("请输入插入位置:");
				scanf("%d",&pos);
			anypos_insert(L,pos);
				link_output(L);
			}
			break;
		case 3:
			{
			int pos;
				printf("请输入插入位置:");
				scanf("%d",&pos);

			anypos_del(L,pos);
			}
			break;
		case 4:
			reserve(L);
			break;
		case 0:
			return 0;
			break;


		}
	}
	return 0;
}

link.h

#ifndef _LINK_H_
#define _LINK_H_
#include <myhead.h>
#define MAX 100

typedef struct student
{
	int id;
	char name[20];
	int age;
}stu;

typedef struct node 
{
	union 
	{
	stu message;
	int len;
	};
	struct node *next;
}Link,*Plink;


Plink apply();
Plink create();

void rear_insert(Plink);

void input_link(Plink);

void link_output(Plink);

void anypos_insert(Plink,int);

void anypos_del(Plink,int);

void reserve(Plink);
#endif


http://www.kler.cn/a/370064.html

相关文章:

  • 优化使用 Flask 构建视频转 GIF 工具
  • AIGC视频生成国产之光:ByteDance的PixelDance模型
  • 生成对抗网络(GAN)入门与编程实现
  • 【Red Hat8】:搭建FTP服务器
  • 【经验分享】ARM Linux-RT内核实时系统性能评估工具
  • 雷电9最新版安装Magisk+LSPosd(新手速通)
  • 我们正在谈论 CI/CD
  • SpringBoot框架下安康旅游网站的设计与实现
  • css实现立体骰子
  • jEasyUI 列运算
  • 基于SSM的在线旅游美食展现管理系统源码
  • 问:数据库存储过程优化实践~
  • 空值合并运算符(??) 可选链操作符(?.)
  • 使用常数指针作为函数参数
  • 聚观早报 | 荣耀Magic7朝霞金配色;一加13全球首发太阳显示技术
  • k8s 二进制部署安装(一)
  • 2020重新出发,MySql基础,MySql数据库备份与恢复
  • 交易所开发:开启数字金融新时代
  • ZooKeeper的应用场景:深入探讨分布式系统中的多样化应用
  • 基于知识图谱的智能法律案件问答系统
  • 制作Ubuntu根文件系统
  • Flink(一)
  • 使用DeepSpeed进行多机多卡训练模型
  • Bug|空心病,不知道自己要干什么
  • 大语言模型数据流程源码解读(基于llama3模型)
  • 自己搭建[文本转语音]服务器