【数据结构】单链表_单链表菜单-程序员宅基地

技术标签: 单链表  链表  数据结构与算法分析  数据结构  

代码实现的单链表的一些常规操作,如下。(代码中调用了自定义的table.h,后面有)

/***************************************** 
Copyright (c) 2015 Jingshuang Hu 
 
@filename:demo.c 
@datetime:2015.09.18 
@author:HJS 
@e-mail:[email protected] 
@blog:http://blog.csdn.net/hujingshuang 
*****************************************/

#include "table.h"
/****************************************/
int main()
{
	LinkList p = NULL;

	int num = 0, pos = 0, value = 0, value1 = 0, value2 = 0;
	List_Init(&p);
	while(1)
	{
		List_Menu();
		scanf("%d", &num);
		switch(num)
		{
			case 1:
				printf("插入位置:");
				scanf("%d", &pos);
				printf("插入值:");
				scanf("%d", &value);
				List_Insert(p, pos, value);
				break;
			case 2:
				printf("删除位置:");
				scanf("%d", &pos);
				List_Delete_Pos(p, pos);
				break;
			case 3:
				printf("删除元素:");
				scanf("%d", &value);
				List_Delete_Elem(p, value);
				break;
			case 4:
				printf("替换位置:");
				scanf("%d", &pos);
				printf("替换成:");
				scanf("%d", &value);
				List_Replace_Pos(p, pos, value);
				break;
			case 5:
				printf("替换元素:");
				scanf("%d", &value1);
				printf("替换成:");
				scanf("%d", &value2);
				List_Replace_Elem(p, value1, value2);
				break;
			case 6:
				printf("查找位置:");
				scanf("%d", &pos);
				List_Find_Pos(p, pos);
				break;
			case 7:
				printf("查找值:");
				scanf("%d", &value);
				List_Find_Elem(p, value);
				break;
			case 8:
				List_Show_Length(p);
				break;
			case 9:
				List_Destroy(p);
				break;
			case 10:
				printf("\n程序结束!\n");
				return 0;
				break;
		}
		List_Show_All(p);
		getchar();getchar();
		system("cls");
	}
	return 0;
}
其中table.h是有关单链表的结构体定义及函数声明,代码如下:
/***************************************** 
Copyright (c) 2015 Jingshuang Hu 
 
@filename:table.h 
@datetime:2015.09.18 
@author:HJS 
@e-mail:[email protected] 
@blog:http://blog.csdn.net/hujingshuang 
*****************************************/

#ifndef _TABLE_H_
#define _TABLE_H_
/***************************************************/
#include <stdio.h>
#include <stdlib.h>
/***************************************************/
typedef struct node
{
	int data;
	struct node *next;
}Lnode, *LinkList;
/***************************************************/
void List_Menu(void);
void List_Init(LinkList *h);
void List_Insert(LinkList h, int pos, int value);
void List_Delete_Pos(LinkList h, int pos);
void List_Delete_Elem(LinkList h, int value);
void List_Find_Pos(LinkList h, int pos);
void List_Find_Elem(LinkList h, int value);
void List_Replace_Pos(LinkList h, int pos, int value);
void List_Replace_Elem(LinkList h, int value1, int value2);
void List_Show_All(LinkList h);
void List_Show_Length(LinkList h);
void List_Destroy(LinkList h);
/***************************************************/
#endif
table.ctable.h函数的具体实现,代码如下:

/****************************************************
Copyright (c) 2015 Jingshuang Hu 
 
@filename:table.c
@datetime:2015.09.18 
@author:HJS 
@e-mail:[email protected] 
@blog:http://blog.csdn.net/hujingshuang 
****************************************************/

#include "table.h"
/***************************************************/
void List_Menu(void)
{
	printf("\n************单链表菜单************\n");
	printf("1.插入元素\n");
	printf("2.按位置删除\t3.按元素删除\n");
	printf("4.按位置替换\t5.按元素替换\n");
	printf("6.按位置查找\t7.按元素查找\n");
	printf("8.查看表长\t9.销毁表\n");
	printf("10.退出程序\n");
	printf("**********************************\n");
	printf("请选择:");
}
/***************************************************/
void List_Init(LinkList *h)//二级指针
{
	*h = (LinkList)malloc(sizeof(Lnode));//生成头结点
	if (!h)
	{
		printf("链表初始化失败!\n");
	}
	(*h)->next = NULL;//头结点的指针域置为空
}
/*******************插值(前插)********************/
void List_Insert(LinkList h, int pos, int value)
{
	LinkList p = h, q;
	int i = 0;
	if (!p->next && pos == 1)//表为空
	{
		q = (LinkList)malloc(sizeof(Lnode));
		if (!q)
		{
			printf("不能生成新的节点!\n");
		}
		q->data = value;
		q->next = p->next;
		p->next = q;	
	}
	else
	{
		while(p->next && i < pos - 1)
		{
			p = p->next;
			i++;
		}
		if (!p->next || i > pos - 1)
		{
			printf("位置不合法!\n");
		}
		else
		{
			q = (LinkList)malloc(sizeof(Lnode));
			if (!q)
			{
				printf("不能生成新的节点!\n");
			}
			q->data = value;
			q->next = p->next;
			p->next = q;
		}
	}
}
/********************删除***************************/
void List_Delete_Pos(LinkList h, int pos)
{
	LinkList p = h, q;
	int i = 0;
	while(p->next && i < pos - 1)
	{
		p = p->next;
		i++;
	}
	if (!p->next || i > pos - 1)
	{
		printf("位置不合法!\n");
	}
	else
	{
		q = p->next;
		p->next = q->next;
		printf("删除元素为:%d\n", q->data);
		free(q);
	}
}
/***************************************************/
void List_Delete_Elem(LinkList h, int value)
{
	LinkList p = h, q;
	int i = 0, flag = 0;
	while(p->next)
	{
		if (p->next->data == value)
		{
			flag++;
			q = p->next;
			p->next = p->next->next;
			free(q);
		}
		else
		{
			p = p->next;
		}
	}
	if (flag)
	{
		printf("元素%d删除完毕!\n", value);
	}
	else
	{
		printf("未发现元素%d\n", value);
	}
}
/**********************替换*************************/
void List_Replace_Pos(LinkList h, int pos, int value)
{
	LinkList p = h->next;
	int i = 0;
	while(p && i < pos - 1)
	{
		p = p->next;
		i++;
	}
	if (!p || i > pos - 1)
	{
		printf("位置不合法!\n");
	}
	else
	{
		p->data = value;
	}
}
/***************************************************/
void List_Replace_Elem(LinkList h, int value1, int value2)
{
	LinkList p = h->next;
	int flag = 0;
	while(p)
	{
		if (p->data == value1)
		{
			flag++;
			p->data = value2;
		}
		p = p->next;
	}
	if (flag)
	{
		printf("已将%d替换成%d\n", value1, value2);
	}
	else
	{
		printf("未发现元素%d\n", value1);
	}
}
/********************查找**************************/
void List_Find_Pos(LinkList h, int pos)
{
	LinkList p = h->next;
	int i = 0;
	while(p && i < pos - 1)
	{
		i++;
		p = p->next;
	}
	if (!p || i > pos - 1)
	{
		printf("位置不合法!\n");
	}
	else
	{
		printf("%d\n", p->data);
	}
}
/***************************************************/
void List_Find_Elem(LinkList h, int value)
{
	LinkList p = h->next;
	int i = 0, flag = 0;
	while(p)
	{
		i++;
		if (p->data == value)
		{
			flag++;
			printf("%d ", i);
		}
		p = p->next;
	}
	printf("共查找到%d个元素\n", flag);
}
/********************显示***************************/
void List_Show_All(LinkList h)
{
	LinkList p = h->next;
	if (!p)
	{
		printf("表空!\n");
	}
	else
	{
		while(p)
		{
			printf("%d ", p->data);
			p = p->next;
		}
		printf("\n");
	}
}
/***************************************************/
void List_Show_Length(LinkList h)
{
	int len = 0;
	LinkList p = h->next;
	while(p)
	{
		len++;
		p = p->next;
	}
	printf("length=%d\n", len);
}
/**********************销毁*************************/
void List_Destroy(LinkList h)
{
	LinkList p = h, q;

	while(p->next)
	{
		q = p->next;
		p->next = q->next;
		free(q);
	}
}

上述代码完好,均可copy使用。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hujingshuang/article/details/48543243

智能推荐

东北大学计算机科学桥梁课程,美国东北大学温哥华分校计算机科学硕士申请介绍...-程序员宅基地

文章浏览阅读752次。Master of Science in Computer Science General RequirementsThe Masters of Science in Computer Science program at Northeastern offers students over 12 specializations ranging from artificial intelligenc..._master of science general

Python中type和isinstance的使用_isinstance和type的作用-程序员宅基地

文章浏览阅读237次。type:显示变量的类型isinstance:判断变量的类型,有两个参数,第一个参数是实例对象,第二个参数是基本类型_isinstance和type的作用

EDAS上传字体嵌入问题及解决办法_edas bookmarks: upload failed: bookmarks are not…-程序员宅基地

文章浏览阅读6.2k次。IEEE会议需要上传PDF格式的稿子,一般的会议不会要求严格,这次在ICCT会议这里着实的郁闷了一把,折腾了半天才发现并解决了问题。word转成PDF后,EDAS网站提示PDF格式错误,我这里分别遇到了两个错误,最后都解决了,希望对大家有帮助。 一、"One or more fonts are not embedded” 这个的意思是这篇PDF里的字体不能全部嵌入,这_edas bookmarks: upload failed: bookmarks are not…

通信的基本概念与STM32上USART串口通信实践_bsp_port.h-程序员宅基地

文章浏览阅读175次。文章目录一、通信的基本概念二、USART串口通信三、实验四、小结与参考链接一、通信的基本概念这部分内容通过野火官方的b站账号出的视频学习的,这里是传送门——通信的基本概念接下来我对学习的内容做个总结数据传输的方式串行通讯指设备之间通过少 量数据信号线(一般是 8根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。就像是单车道的公路,同一时刻只能传输一个数据为的数据。并行通讯指使用 8、16、32 及 64 根或更多的数据线进行传输的通讯方式,就像多个车道的公_bsp_port.h

项目8 利用DHCP自动分配IP地址-程序员宅基地

文章浏览阅读3.2k次。一、项目背景1.项目任务某公司组建单位内部的局域网,随着计算机数量的增加,网络管理员在客户机的TCP/IP维护上花费了不少的时间,首先在连入单位内部网络时需要分配IP地址,另外有些客户在对计算机重新安装操作系统后经常询问自己计算机的IP地址等信息,在这种情况下,需要在局域网内部安装并配置一台DHCP服务器,为公司内除服务器以外的所有计算机自动配置IP地址、子网掩码、默认网关、DNS服务器地址等网络参数。2.项目设计:(请将标黄色部分改为自己的学号,参照作业案例,查阅资料,完成任务一,1...

练习题_2019华为硬件笔试-程序员宅基地

文章浏览阅读832次。第一题用指针依次寻找数组内的数字,反复利用sum = sum * 10 + s[i] - '0'根据题意:Ai<=BjA_i<=B_jAi​<=Bj​AiA_iAi​找不到R范围内的BjB_jBj​,则列出最近的BjB_jBj​(仍满足条件1)仍找不到则丢弃AiA_iAi​测试样例:A={11,13,15},B={12,14,16},R=1时间复杂度:**..._2019华为硬件笔试

随便推点

自考计算机应用要学模电吗,一位计算机应用考生自考历程.doc-程序员宅基地

文章浏览阅读139次。终于所有的理论课都考完了,忙碌两年也终于到了放松的时刻.闲暇之于,便回顾一下走过的每一步,把一些写出来与已完成学业的,未完成的,和即将要重复这一路程的朋友们一起分享.序 2000年底,跳槽到一家制造性企业从事计算机系统的维护.工作无非是一些计算机系统的日常维护,有时也会自己作一些小的应用程序.工作量相来说不算紧张.以前一直在国企,毕业时所学的专业是和电有关的,可和计算机应用相差甚远.可是阴差阳错,..._计算机需要精通模电么

python运行时修改代码会怎样_python运行时修改代码的方法——monkey patch-程序员宅基地

文章浏览阅读621次。monkey patch (猴子补丁)用来在运行时动态修改已有的代码,而不需要修改原始代码。简单的monkey patch 实现:[Python]#coding=utf-8def originalFunc():print 'this is original function!'def modifiedFunc():modifiedFunc=1print 'this is modified func..._代码运行中可以修改代码吗

Frequent Pattern挖掘之四(MapReduce框架下的FP Growth算法详解上篇)(转)-程序员宅基地

文章浏览阅读186次。这一篇博客接前面的博客分析MapReduce框架下FP Growth算法详细步骤。Sharding这一步没什么好讲的,将数据库分成连续的大小相等的几个块,放置在不同的机器上。以Hadoop来讲,其框架本身就将整个数据库放在不同的机器上,形成不同的分区,因此在Hadoop上我们本身都不需要做什么。F_list计算这一步来讲也没什么好讲的,就是一个简单的频率统计,这是MapReduce..._apriror sklearn

Eclipse+Java+Swing实现学校教材管理系统_教材管理系统swing-程序员宅基地

文章浏览阅读7.9k次,点赞33次,收藏109次。Java+Swing实现学校教材管理系统一、系统介绍二、系统展示1.登录页2.主页面3.导出表单三、系统实现DBUtil.javaLogin.javaMyTable.javaXMainFrame.java四、其他1.其他系统实现2.获取源码3.备注一、系统介绍本系统实现的功能:管理员登录、教材的增删改查、导出PDF。JDK:1.8数据库:Mysql8.0.13二、系统展示1.登录页2.主页面3.导出表单三、系统实现DBUtil.javapackage com.sjsq;/**_教材管理系统swing

RuoYi -- Git、注解机制、项目本身、_ruo-yi-git-程序员宅基地

文章浏览阅读758次。Git版本控制( Revision control)是一种在并发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。实现跨区域多人协同开发 追踪和记载一个或者多个文件的历史记录 组织和保护你的源代码和文档 统计工作量 并行开发、提高开发效率跟踪记录整个软件的开发过程 减轻开发人员的负担,节省时间,同时降低人为错误版本控制的分类1、本地版本控制 (以RCS为代表)记录文件每次的更新,可以对每个版本做一个快照,或是记录.._ruo-yi-git

封装篇——Fragment懒加载_fragment懒加载封装-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏25次。为什么要做fragment的懒加载封装呢???一个字“懒”!!! 我老大告诉我:不会偷懒的程序员不是个好厨师 ^~^ ^~^ ^~^我们可能会以 viewpager(或其他容器)与多个Fragment组合使用,相信使用过的猿(媛)友们都碰到过下面的这些问题: 1. 预加载Fragment时,也就是加载不可见的Fragment时,该不可见的Fragment初始化数据和页面可能占用了大量的资源;_fragment懒加载封装