IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 单链表操作元素为结构体,实现增加,删除,查找,修改。 -> 正文阅读

[数据结构与算法]单链表操作元素为结构体,实现增加,删除,查找,修改。

作者:>

单链表操作元素为结构体,实现增加,删除,查找,修改。
源代码:

/*
* 
* author:xwq
* date:2021/9/28     21:21
* description:单链表操作的元素为结构体,实现增加,删除,查找,修改。
*
*/

#include<stdio.h>
#include<malloc.h>
#include<string>
#pragma warning(disable:4996)

typedef struct Student 
{
	char name[12];
	int age;
	char address[50];
}Elemtype;

typedef struct Man {
	Student data;
	struct Man* next;
}Man,*LinkMan;


void main_menu(LinkMan L);
//初始化单链表
int InitLink(LinkMan *L);
//插入元素
int InsertLink(LinkMan L, int i, Elemtype* e);
//删除某个节点
int DeleteLink(LinkMan L, int &i);
//查找某个节点
int SearchLink(LinkMan L, const int& i);
//修改某个节点的值
int UpdateLink(LinkMan L, int& i);
//打印单链表
int PrintLink(LinkMan L);


//主函数
int main(void)
{
	int result(0);
	Student e;
	LinkMan L=NULL;
	printf("*************************[菜鸟到底有多菜]********************************************\n");
	printf("**********本软件学生信息结构体,姓名占12个字节,地址50个字节,请勿超出!!!****************\n");
	result=InitLink(&L);
	if (result) printf("初始化成功\n");
	else  printf("初始化失败\n");
	printf("请输入要插入元素的个数;");
	scanf("%d", &result);
	printf("请输入插入节点的元素:\n");
	for (int i = 1; i <= result; i++)
	{
		printf("请输入学生姓名:");
		scanf("%s",&e.name);
		printf("请输入学生年龄:");
		scanf("%d", &e.age);
		printf("请输入学生家庭地址:");
		scanf("%s", &e.address);
		InsertLink(L,i, &e);
	}
	main_menu(L);
	return 0;
}

//主菜单
void main_menu(LinkMan L)
{
	int id,position;
	Elemtype e;
	printf("请选择要进行的操作(0 退出本软件  1打印整个链表  2查找某个位置的节点  3删除某个节点  4修改某个节点  5插入某个节点):");
	scanf("%d", &id);
	switch (id)
	{
	case 0:
		printf("bye~,欢迎下次继续使用");
			break;
	case 1:
		printf("打印所有节点的结果;\n");
		PrintLink(L);
		main_menu(L);
		break;
	case 2:
		printf("请输入要查找的节点的位置:");
		scanf("%d", &position);
		SearchLink(L, position);
		main_menu(L);
		break;
	case 3:
		printf("请输入要删除的节点位置:");
		scanf("%d", &position);
		DeleteLink(L, position);
		main_menu(L);
		break;
	case 4:
		printf("请输入要修改的节点位置:");
		scanf("%d", &position);
		UpdateLink(L, position);
		main_menu(L);
		break;
	case 5:
		printf("请输入要插入的节点位置:");
		scanf("%d", &position);
		printf("请输入学生姓名:");
		scanf("%s", &e.name);
		printf("请输入学生年龄:");
		scanf("%d", &e.age);
		printf("请输入学生家庭地址:");
		scanf("%s", &e.address);
		InsertLink(L, position, &e);
		main_menu(L);
		break;
	default:
		break;
	}

}




//初始化单链表
int InitLink(LinkMan *L)
{
	Man *head = (Man*)malloc(sizeof(Man));
	if (!head)
	{
		printf("初始化失败\n"); return 0;
	}
	head->next = NULL;
	*L = head;
	return 1;
}

//插入元素
int InsertLink(LinkMan L, int i, Elemtype* e)
{
	if (i < 1 || e == NULL)
	{
		printf("插入的位置或者元素为空\n");
		return 0;
	}
	Man* temp = (Man*)malloc(sizeof(Man));
	if (temp==NULL)
	{
		printf("内存分配新节点失败\n");
	}
	memcpy(temp, e, sizeof(Elemtype));
	LinkMan p = L;
	int k = 0;
	while (p!=NULL&&k<i-1)
	{
		p = p->next;
		k++;
	}
	if (p == NULL)
	{
		printf("插入的位置不合法,前面的节点为空节点\n");
		return 0;
	}
	else
	{
		p->next = temp;
		temp->next = NULL;
	}
	return 1;
}


//删除某个节点
int DeleteLink(LinkMan L, int& i)
{
	if (i < 1)
	{
		printf("删除的位置输入错误,应该为>1的数\n");
		return 0;
	}
	LinkMan p = L;
	int k = 0;
	while (p != NULL && k < i - 1)
	{
		p = p->next;
		k++;
	}
	if (p->next == NULL)
	{
		printf("删除的位置超过了表长\n");
		return 0;
	}
	else
	{
		LinkMan temp = p->next;
		p->next = p->next->next;
		free(temp);
	}
	return 1;
}


//查找某个节点
int SearchLink(LinkMan L,const int& i)
{
	if(i<1)
	{
		printf("查找的位置输入错误,应该为>1的数\n");
		return 0;
	}
	LinkMan p = L;
	int k = 0;
	while (p!=NULL&&k<i)
	{
		p = p->next;
		k++;
	}
	if (!p)
	{
		printf("查找的位置超过了表长\n");
		return 0;
	}
	else
	{
		printf("学生的姓名:%3s, 学生的年龄:%3d, 学生的家庭地址:%3s\n", p->data.name, p->data.age, p->data.address);
		return 1;
	}


}


//修改某个节点的值
int UpdateLink(LinkMan L, int& i)
{
	if (i < 1)
	{
		printf("删除的位置输入错误,应该为>1的数\n");
		return 0;
	}
	LinkMan p = L;
	int k =0;
	while (p!=NULL&&k<i)
	{
		p = p->next;
		k++;
	}
	if (p==NULL)
	{
		printf("修改的位置超过了表长\n");
		return 0;
	}
	Elemtype e;
	printf("请输入修改后学生姓名:");
	scanf("%s", &e.name);
	printf("请输入修改后学生年龄:");
	scanf("%d", &e.age);
	printf("请输入修改后学生家庭地址:");
	scanf("%s", &e.address);
	memcpy(p, &e, sizeof(Elemtype));
	return 1;
}


//打印单链表
int PrintLink(LinkMan L)
{
	LinkMan p = L->next;
	if (!p) {
		printf("这是一个空表\n");
		return 0;
	}
	while (p!=NULL)
	{
		printf("学生的姓名:%3s, 学生的年龄:%3d, 学生的家庭地址:%3s\n",p->data.name,p->data.age,p->data.address);
		p = p->next;
	}
	return 1;
}

运行结果:
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:33:19  更:2021-09-29 10:34:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:01:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码