首页 > 其他分享 >数据结构笔试题——基于C语言的链表功能函数实现

数据结构笔试题——基于C语言的链表功能函数实现

时间:2024-04-23 23:34:22浏览次数:27  
标签:Head return C语言 next 链表 LList 数据结构 tmp1

题目1

题目要求如下:

/**

* @function name: LList_CntdmFind

* @brief 查找链表中,倒数第k个位置上的节点

* @param :

​ @Head:链表头节点

​ @k :倒数第k个位置

* @retval :int 型返回值;返回-1时即为失败,返回0时表示成功;

* @date :2024/04/23

* @version 1.0

* @note

* CopyRight (c) 2023-2024 [email protected] All Right Reseverd

*/

int LList_CntdmFind(LList_t *Head, int k)
{
	LList_t *tmp1 = Head->next; // 用来遍历
	int length = 0;				// 用来存放元素个数
	int i = 0;
	if (NULL == Head) // 判断空表
		return -1;
	while (tmp1) // 计算元素个数
	{
		length++;
		tmp1 = tmp1->next;
	}
	if (length < k) // 如果k太大
	{
		printf("The k is invalid\n");
		return -1;
	}
	else if (length == k) // k正好是第一个
	{
		return Head->next->data;
	}
	else // 正常倒数
	{
		tmp1 = Head->next;
		for (i = 0; i < length - k; i++)
		{
			tmp1 = tmp1->next;
		}
		return tmp1->data;
	}
}

题目2

题目要求如下:

/**

* @function name: LList_DeleteMin

* @brief :删除单链表中的最小值节点

* @param :

​ @Head:链表头节点

* @retval :bool 型返回值;返回false时即为失败,返回true时表示成功;

* @date :2024/04/23

* @version 1.0

* @note

* CopyRight (c) 2023-2024 [email protected] All Right Reseverd

*/

bool LList_DeleteMin(LList_t *Head)
{
	LList_t *tmp1 = Head->next;		// 用来遍历
	LList_t *tmpFormer = Head;		// 用来存放目标指针前一个节点
	LList_t *tmpDest = Head->next;	// 用来存放目标指针
	DataType_t tmpMin = tmp1->data; // 用来存放最小值
	if (!tmp1)						// 如果是空表
	{
		printf("The list is NULL");
		return false;
	}
	if (!tmp1->next) // 只有一个元素,就删掉
	{
		free(Head->next);
		Head = NULL;
		return true;
	}
	while (tmp1->next) // 两个以上的元素,定位到最小元素
	{
		if (tmpMin > tmp1->next->data)
		{
			tmpMin = tmp1->next->data;
			tmpDest = tmp1->next;
			tmpFormer = tmp1;
		}
		tmp1 = tmp1->next;
	}
	tmpFormer->next = tmpDest->next; // 进行删除操作
	tmpDest->next = NULL;
	free(tmpDest);
	return true;
}

标签:Head,return,C语言,next,链表,LList,数据结构,tmp1
From: https://www.cnblogs.com/cino/p/18154088

相关文章

  • 数据结构基础第3讲
    数据结构基础第3讲栈及其应用内容考点一:栈的概念1.顺序栈的定义:出栈顺序情况计算给定n个元素,出栈顺序的情形满足卡特兰数,计算公式:\[\frac{C_{2n}^{n}}{n+1}\]例题:确定第一个出栈的谁。有两种可能:找带头大哥。栈的顺序存储结构顺序栈操作顺序栈4要素栈空......
  • 数据结构基础第4讲
    数据结构基础第4讲队列内容考点一:队列概念代码不考1.队列的定义考点二:顺序队列的定义考点三顺序队列的性质与操作4要素:考点四:循环队列的定义由于顺序队列会存在假溢出问题,引入循环队列。假溢出:描述:考点五:循环队列的操作判断空满:性质:考频75%元素个......
  • 数据结构基础第6讲
    数据结构基础第6讲图及其应用1-2个选择考点一:图的基本概念1.图基本概念连通图:极大连通子图-连通分量:极小连通子图-生成树:强连通顶点给定n个顶点,要保证图在任何情况下连通需要最小边数:1.生成树,边(n-1)2.完全无向图\(\frac{(n-1)\timesn}{2}\)3.\(\left......
  • 数据结构基础第5讲
    数据结构基础第5讲树和二叉树本章内容:考点一:基本术语1.数的引入2.树的定义层次,分支,一对多。互不相交的含义:3.结点的分类结点的度:4.结点的关系树的深度:树中结点最大高度称为树的高度(或树的深度)行兄弟结点:在同一层但不是兄弟的结点路径长度:等于路径......
  • 单向与双向循环链表
    单向循环链表/********************************************************************* 函数名称: *函数功能:设计单向循环链表的接口*函数参数:* ​*返回结果:*注意事项:None*函数作者:zcx982795194@[email protected]*创建......
  • C语言单向循环链表的增删操作
    /***********************************************************************************************************设计双向链表的接口****Copyright(c) 2023-2024 [email protected] AllrightReserved****************************************......
  • 单向循环链表和双向链表程序编程
    链表学习记录设计单向循环链表的接口/***********************************************************************************************************设计单向循环链表的接口****Copyright(c)[email protected]*************......
  • C语言
    C语言(持续更新中)C语言是一门面向过程的计算机编程语言,与C++、C#、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。而嵌入式最基本的工具就是c语言,所以本文......
  • 双向链表的接口的接口程序
    双向链表的接口的接口程序/********************************************************************* filename: 双向链表的接口的接口程序* author :[email protected]* date :2024-4-23* function:* note :None** CopyRight(c)20241764757......
  • 链表(考研算法)
    数据结构链表练习题:1.已知,一个带有头结点的单链表,结点结构为:假设该链表只给出了头指针head。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k(k为正整数)个位置上的结点。若查找成功,算法输出该结点的data值,并返回1;否则,只返回0。/**************************......