顺序表和链表的练习题

这篇具有很好参考价值的文章主要介绍了顺序表和链表的练习题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

顺序表

题目一:

顺序表和链表的练习题

题目分析:

该题目需要先对顺序表进行遍历至元素x正确插入位置,再对顺序表完成插入操作。因此涉及到for循环与if语句的使用

代码实现

/********************************************************************
*
*	name	 :	SequenceList_insert
*	function :  实现插入元素x,并保持链表的递增顺序
*	argument :  
*				@*L 顺序表首元素地址
				@x  插入元素值
*				
*	retval	 :  none
*	author	 :  790557054@qq.com
*	date	 :  2024/04/22
* 	note	 :  none
* 	
* *****************************************************************/
void SequenceList_Insert(SeqList_t *L,int x)
{
	//定义一个变量用于存储正确位置的下标
	int temp = -1;
	//对顺序表内元素与x进行大概判断
	if( x > L[last / 2])
	{
		for (int i = (last / 2) + 1; i <= last;i++)
		{
			if(x < L[i])
			{
				temp = i;
				break;
			}
		}
		//将插入位置后的后继元素后移
		for (int i = last; i >= temp;i--)
		{
			L[i + 1] = L[i];
		}

		//插入x
		L[temp] = x;
	}	
	else
	{
		//遍历查找x元素插入位置
		for (int i = 0; i <= (last / 2);i++)
		{
			if(x < L[i])
			{
				temp = i;
				break;
			}
		}
		//将插入位置后的后继元素后移
		for (int i = last; i >= temp;i--)
		{
			L[i + 1] = L[i];
		}

		//插入x
		L[temp] = x;
	}

题目二:

顺序表和链表的练习题

题目分析

该题目需要对顺序表制定元素删除,并且还需要返回值。所以定义的函数接口不能为void类型,使用for循环对p后继顺序表元素进行遍历前移,且考虑可能出现删除失败的原因

代码实现

/********************************************************************
*
*	name	 :	SequenceList_Del
*	function :  实现删除顺序表指定位置元素
*	argument :  
*				@*L 顺序表首元素地址
				@p  指定位置p
*				
*	retval	 :  none
*	author	 :  790557054@qq.com
*	date	 :  2024/04/22
* 	note	 :  none
* 	
* *****************************************************************/
int SequenceList_Del(SeqList_t *L, int p)
{
	//排除p错误情况
	if(p < 0 || p> length -1)
		return 0;

	//将被删除位置p的元素赋值给e
	int e;
	L[p] = e;
	//对位置p的后继元素进行
	for (int i = p; i <= last; i++)
	{
		L[i] = L[i + 1];
	}
	//将最后顺序表最后元素清零且last减少1
	L[last] = 0;
	last--;
	return 1;
}

链表

题目一:

顺序表和链表的练习题

题目分析:

该题目涉及到单向链表的遍历与删除。首先,定义一个结构体指针变量,用于在遍历时存储最小值节点的直接前驱节点的地址;其次,需要对最小值节点位置进行判断,排除掉该节点为尾节点的情况;最后,利用该指针变量完成目标节点的删除操作

代码实现

/********************************************************************
*
*	name	 :	LkList_MinDle
*	function :  实现删除单向链表的最小值节点
*	argument :  
*				@*L 单向链表头结点
*				
*	retval	 :  none
*	author	 :  790557054@qq.com
*	date	 :  2024/04/22
* 	note	 :  none
* 	
* *****************************************************************/
void LkList_MinDle(LkList_t*L) //假设单向链表结构体类型为 LkList_t
{
	//定义个结构体指针变量p1指向头结点L ,p2为循环指针变量,p3为循环变量的前驱节点
	LkList_t *p1 = L;
	LkList_t *p2 = NULL;
	LkList_t *p3 = L;

	//定义一个变量用于存储数据最小值,假设数据类型为int
	int Data_Min = p2->data;

	//遍历出最小值节点的位置,循环中止条件,即循环至尾结点
	for (p2 = L->next ; p2 != NULL;p2 = p2->next)
	{
		//判断是否为最小值节点
		if((p2->data) > (p2->next->data))
		{
			Data_Min = p2->next->data;
			p1 = p2;    //将p1变为最小值节点的直接前驱节点
		}
		p3 = p3->next;  //p3为p2的直接前驱节点
	}

	//判断最小值节点是否为尾节点,此时的p2为链表尾节点
	if( Data_Min > p2->data )
	{
		//先连接
		p3->next = NULL;
		//再删除
		free(p2);
		return; 		//结束该函数
	}

	//排除最小值节点为尾节点后,将最小值节点备份至p2
	p2 = p1->next;
	p1->next = p1->next->next;
	p2->next = NULL;
	
	//释放掉p2
	free(p2);
    
	return; //正常退出函数
}

题目二:

顺序表和链表的练习题

代码分析:

对题目要求分析可得,[p1和 p2之间节点个数差 = k],其中p1为题目所求位置节点,p2为链表尾节点,K为题目中所给数,

回答:

1)该算法需要定义两个结构体指针变量p1和p2,其中p2需从单链表头结点遍历至尾结点,p1则需按照[p1和 p2之间节点个数差 = k ]公式调整距离尾结点的个数,随后返回p1节点的data值和1;当链表中无节点时,返回0.

2)首先,定义两个结构体指针变量p1和p2;其次,对链表元素个数进行判断,进行错误情况排除;最终,利用for循环遍历链表,将p1和p2分别表示正确的节点,返回p1的data值和1

3)代码实现:文章来源地址https://www.toymoban.com/news/detail-855750.html

/********************************************************************
*
*	name	 :	LkList_Reciprocal
*	function :  实现输出单链表的第K个值的data值
*	argument :  
*				@*head 单向链表的头结点
				@k 倒数第几个数
*				
*	retval	 :  调用成功输出倒数第k个节点的data值并且返回1;否则返回0.
*	author	 :  790557054@qq.c
*	date	 :  2024/04/22
* 	note	 :  none
* 	
* *****************************************************************/

//假设data类型为int
int LkList_Reciprocal(LkList_t*head, int k)
{
	LkList_t *p1 = head;
	LkList_t *p2 = head;
	//定义一个整型变量i,进行判断p2位置
	int i = 0;

	//排除错误情况
	if(p2->next == NULL)
	{
		return 0;
	}

	//当p2为尾节点时跳出while循环
	while(p2->next)
	{
		p2 = p2->next;
		i++;
		if(i >= k) //当p1和p2之间节点差为k后,p1和p2需要同时前进遍历
		{
			p1 = p1->next;
		}
	}

	printf("倒数第(k = %d)个节点的data值为:%d\n", k, p1->data);
	return 1;
}

到了这里,关于顺序表和链表的练习题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】顺序表和链表

    线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在物理上

    2024年01月20日
    浏览(37)
  • 数据结构2:顺序表和链表

    目录 1.线性表 2.顺序表 2.1概念及结构 2.2接口实现 2.3数据相关面试题 2.4顺序表的问题及思考 3.链表 3.1链表的概念及结构 3.2链表的分类 3.3链表的实现 3.4链表面试题 3.5双向链表的实现 4.顺序表和链表的区别 线性表(linear list)是具有相同特征的数据元素的有限序列。线性表是

    2023年04月17日
    浏览(29)
  • 顺序表和链表对应的经典算法

    目录 一,移除元素 二,合并两个有序数组 三,环形链表的约瑟夫问题 四,链表的中间节点 五,合并两个有序链表 六,反转链表 七,移除链表元素 一,移除元素 思路:定义一个循环遍历数组,如果遇到的不是val就记录下来这个元素,如果不是就跳过 定义两个指针,一个用

    2024年02月21日
    浏览(27)
  • 数据结构顺序表和链表(超详细)

    线性表 ( linear list ) 是 n 个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构, 常见的线性表:顺序表、链表、栈、队列、字符串 ... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在

    2024年02月13日
    浏览(31)
  • 数据结构:2_顺序表和链表

    线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构, 常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的 ,线性表在物理上

    2024年01月18日
    浏览(35)
  • 顺序表和链表从零详细梳理(顺序表篇)

    线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构, 也就说是连续的一条直线 。但是在物理结构上并不一定是连续的,线性表在物理上

    2024年02月22日
    浏览(25)
  • 数据结构奇妙旅程之顺序表和链表

    ꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶ 个人主页:xiaoxieʕ̯

    2024年02月05日
    浏览(42)
  • 【手撕数据结构】(三)顺序表和链表

    🎗️线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 🎗️线性表在逻辑上是线性结构,也就说是一条连续的直线。但是在物理结构上并不一定是连续的,线性表在物理上存储

    2024年02月05日
    浏览(31)
  • 【数据结构初阶】顺序表和链表(1)

    线性表(linear list) 是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上

    2024年02月08日
    浏览(34)
  • 数据结构修炼第二篇:顺序表和链表

    第一章 时间复杂度和空间复杂度 第二章 顺序表,列表 第三章 栈和队列 第四章 二叉树 第五章 排序 作者:🎈乐言🎈 简介:🎈大一学生,目前在致力于c/c++/python,高数的学习,有问题尽管问我,关注后私聊! 持续更新专栏:《c进阶》,《数据结构修炼》 🚀 (优质好文持

    2024年02月02日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包