数据结构练习:运用单链表实现图书管理系统(c/c++)(内含带头结点的单链表的基本操作)

正文

本程序使用带头节点的单链表存储结构实现,共有六个基本功能,完成对信息链表的增删改查。

注意

/*
1.对于结构体或自定义元素类型最好传地址,传值的话会涉及到内存拷贝。
2.函数memset()与memcpy()是c/c++中的内存初始化和内存拷贝函数,数据元素是结构体变量时也适用,初始化或者赋值时不需要对结构体内数据元素进行一个一个的赋值。
函数解释:
(1).void *memset(void *s, int ch, size_t n);
将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
(2).void *memcpy(void *destin, void *source, unsigned n);
从源source所指的内存地址的起始位置开始拷贝n个字节到目标destin所指的内存地址的起始位置中。
3.system(“color f1”);//调整背景颜色与字符颜色
头文件是 #include<windows.h>
**/

部分功能运行展示

1.插入信息功能:
插入信息功能
2.清除信息功能
清除信息功能
3.退出系统功能
退出系统功能

所包含头文件及结构体的定义

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>

int seat;//定义一个全局变量,保存结点的位置序号 

//定义结构体数据元素。 
typedef struct{
   
	int num; //定义图书编号。 
	char name[31]; //定义图书名字。 
}ElemType;

//定义链表节点结构体。 
typedef struct LNode{
    
	ElemType data; // 加入一个自定义数据元素 用来存放数据。 
	struct LNode *next; //定义一个节点类型指针,后续让它指向该节点的下一结点。 
}LNode,*LinkList;

自定义函数

// 初始化链表LL,返回值:成功-头结点的地址,失败-NULL。 
LNode *InitList(); 

// 销毁链表LL。
//注意链表的销毁操作最后需要将链表指针也置空。
void DestroyList(LinkList LL); 

// 清空链表。
//清空链表需要保留头指针。
void ClearList(LinkList LL);

//打印链表。 
void PrintList(LinkList LL);

//在链表中第seat个位置插入元素,返回值:成功-1,失败-0。 
int InsertList(LinkList LL,unsigned int seat,ElemType *ee); 

//在链表第一个位置添加元素,返回值:成功-1,失败-0。  
int PushFront(LinkList LL,ElemType *ee);

//在链表最后一个位置添加元素。 
void PushBack(LinkList LL,ElemType *ee);

//在链表中第seat个位置删除元素,返回值:成功-1,失败-0。
int DeleteList(LinkList LL,unsigned int seat,ElemType *ee);

// 通过元素信息删除表中节点
void DeleteNode(LinkList LL,ElemType *ee);  

//根据编号寻找结点位置,返回值:成功-结点位置,失败-0。
int LocateList(LinkList LL,int ii);

主函数

int main()
{
   
	LinkList LL;//声明一个链表。 
	LL=NULL;
	
	ElemType ee;//声明一个自定义元素。 
	
	LL=InitList();//对链表进行初始化。 
	
	int choose,ii; //choose保存主要功能选择号码,ii用于保存次要功能选择号码。 
	char name_tmp[31];
	
	system("color f1");//调整背景颜色与字符颜色 
	//条件始终为真的循环。 
	while(1){
   
	printf("\n");
	printf("---------------------------------\n");
	printf("*    欢迎使用图书管理系统    *\n");
	printf("*    1.查看所有图书信息      *\n");
	printf("*    2.添加图书信息          *\n");
	printf("*    3.删除图书信息          *\n");
	printf("*    4.修改图书信息          *\n");
	printf("*    5.清空图书信息          *\n");
	printf("*    6.退出系统              *\n");
	printf("---------------------------------\n");
	printf("\n");
	printf("请选择功能选项(1-6):\n");
	scanf("%d",&choose);
	switch(choose){
   
		case 1:
			PrintList(LL); //打印链表。 
			break;
		case 2:
			printf("请插入图书信息(输入为0时停止插入):\n");
			printf("请输入要插入的图书编号:\n");
			scanf("%d",&ee.num);
			printf("请输入要插入的图书名:\n");
			scanf("%s",&name_tmp); strcpy(ee.name,name_tmp);
			while(ee.num!=0)
			{
   
				printf("请选择要添加图书信息的位置(1-添加在第一个,2-添加在末尾,3-自定义位置):\n");
			    scanf("%d",&ii);
			    if(ii == 1) PushFront(LL,&ee);//在链表第一个位置添加元素 。 
			    if(ii == 2) PushBack(LL,&ee);//在链表最后一个位置添加元素。 
			    if(ii == 3)
			    {
   
				    printf("请输入插入位置:\n");
				    scanf("%d",&seat);
				    InsertList(LL,seat,&ee);//在链表中第ii个位置插入元素,返回值:成功-1,失败-0。 
			    }
			    printf("请插入图书信息(输入为0时停止插入):\n");
			    printf("请输入要插入的图书编号:\n");
			    scanf("%d",&ee.num
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幺九久99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值