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

相关推荐
✎ ﹏梦醒͜ღ҉繁华落℘9 分钟前
编程基础--数据结构
数据结构·算法
mifengxing10 分钟前
B树的定义以及插入和删除
数据结构·b树
sin_hielo15 分钟前
leetcode 1523
数据结构·算法·leetcode
xu_yule20 分钟前
数据结构(7)带头双向循环链表的实现
数据结构·链表
代码游侠22 分钟前
复习——线性表
linux·c语言·数据结构·学习·算法
烛衔溟25 分钟前
C语言图论:无向图基础
c语言·数据结构·图论·无向图
秋深枫叶红29 分钟前
嵌入式第二十九篇——数据结构——树
数据结构·学习·算法·深度优先
小龙报35 分钟前
【C语言初阶】动态内存分配实战指南:C 语言 4 大函数使用 + 经典笔试题 + 柔性数组优势与内存区域
android·c语言·开发语言·数据结构·c++·算法·visual studio
小龙报39 分钟前
【算法通关指南:算法基础篇(三)】一维差分专题:1.【模板】差分 2.海底高铁
android·c语言·数据结构·c++·算法·leetcode·visual studio
小李小李快乐不已1 小时前
图论理论基础(5)
数据结构·c++·算法·机器学习·动态规划·图论