910数据结构(2014年真题)

算法设计题

问题1

已知一个带头结点单链表head,假设结点中的元素为整数,试编写算法:按递增次序输出单链表中各个结点的数据元素,并释放结点所占的存储空间。要求:(1)用文字给出你的算法思想;(2)不允许使用数组作为辅助空间。

cpp 复制代码
//算法思想(冒泡排序)
对链表进行遍历,在每趟遍历中查找链表的最小值,输出并释放空间。再查找次小值,输出并释放空间,最后释放头节点。算法时间复杂度为O(n^2)
cpp 复制代码
//代码实现
	while(head->next != null){
		LNode *pre = head;
		LNode *p = head->next;
		while(p->next != null){
			if(p->next->data < pre->next->data){
				pre = p;
			}
			p = p->next;
		}
		cout << pre->next->data;
		LNode *q = pre->next;
		pre->next = q->next;
		free(q)
	}
	free(head);
}

问题2

假设以带头结点循环单链表表示队列,并且只设置一个指针rear指向队尾结点,但不设头指针,请写出相应的入队列和出队列操作。

cpp 复制代码
//算法思想
本题是链队基本操作的扩展,知道尾指针后,要实现元素入队,则直接用链表的插入操作即可。要实现出队操作,则需要根据尾指针找出头结点和开始结点,然后进行删除。要注意的是,尾指针应始终指向终端结点,并且当删除结点后队列为空时,必须特殊处理
cpp 复制代码
//代码实现
typedef struct QueueNode{
	int data;
	struct QueueNode *next;
}QueueNode;

typedef struct{
	QueueNode *rear;
}LinkQueue;

bool isEmpty(LinkQueue *Q){
	return Q->rear->next == Q->rear;
}

void initQueue(){
	Q->rear = (QueueNode *)malloc(sizeof(QueueNode));
	Q->rear->next = Q->rear;
}

void enQueue(LinkQueue *&Q, int x){
	QueueNode *p = (QueueNode *)malloc(sizeof(QueueNode));
	p->data = x;
	p->next = Q->rear->next;
	Q->rear->next = p;
	Q->rear = p;//将尾指针移向新节点
}

int deQueue(LinkQueue *&Q, int &x){
	if(isEmpty(Q)){
		return 0;
	}
	QueueNode *p;
	p = Q->rear->next->next;
	if(p == Q->rear){//队列中除头结点外只有一个结点
		Q->rear = Q->rear->next;
		Q->rear->next = Q->rear;
	}else{
		Q->rear->next->next = p->next;
	}
	x = p->data;
	free(p);
	return x;
}

注意:什么时候用. 什么时候用->

cpp 复制代码
typedef struct LNode {
	int data;
	struct LNode *next;
}LNode,*LinkList;

LNode* p;

LinkList L;

结构体变量用「.」来访问成员,而结构体指针用「->」来访问

访问data的两种方式: p->data 等价于 L.data

相关推荐
野犬寒鸦7 分钟前
力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
java·数据结构·后端·算法·leetcode
一枝小雨36 分钟前
【OJ】C++ vector类OJ题
数据结构·c++·算法·leetcode·oj题
豆沙沙包?2 小时前
2025年- H118-Lc86. 分隔链表(链表)--Java版
java·数据结构·链表
得意霄尽欢3 小时前
Redis之核心数据结构浅析
数据结构·redis
DashingGuy4 小时前
算法(keep learning)
java·数据结构·算法
田里的水稻4 小时前
C++_数据类型和数据结构
java·数据结构·c++
兔兔西4 小时前
【数据结构、java学习】数组(Array)
java·数据结构·算法
小徐不徐说4 小时前
数据结构基础之队列:数组/链表
c语言·数据结构·算法·链表·面试
小江村儿的文杰6 小时前
理解UE4中C++17的...符号及enable_if_t的用法及SFINAE思想
数据结构·c++·ue4
快去睡觉~9 小时前
力扣416:分割等和子集
数据结构·c++·算法·leetcode·职场和发展·动态规划