数据结构实用教程习题答案

合集下载

数据结构实用教程习题答案

数据结构实用教程习题答案

数据结构实用教程习题答案引言数据结构作为计算机科学的基本理论和关键技术之一,在计算机编程、算法设计等领域都占据着重要的地位。

然而,对于初学者来说,学习数据结构常常是一项具有挑战性的任务。

本文将提供一些实用的习题答案,旨在帮助读者更好地理解和掌握数据结构的基本概念和应用。

一、线性数据结构1. 数组题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的索引。

答案:```pythondef twoSum(nums, target):hashMap = dict()for i, num in enumerate(nums):if target - num in hashMap:return [hashMap[target - num], i]hashMap[num] = ireturn None```2. 链表题目:反转一个单链表。

答案:```pythondef reverseList(head):prev = Nonecurr = headwhile curr:nextTemp = curr.next curr.next = prevprev = currcurr = nextTempreturn prev```二、非线性数据结构3. 栈题目:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

答案:```pythonclass MinStack:def __init__(self):self.stack = []self.minStack = []def push(self, x):self.stack.append(x)if not self.minStack or x <= self.getMin():self.minStack.append(x)def pop(self):if self.stack.pop() == self.getMin():self.minStack.pop()def top(self):return self.stack[-1]def getMin(self):return self.minStack[-1]4. 队列题目:使用队列实现栈。

《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)数据结构课后习题答案(第2版)第一章:基本概念1. 什么是数据结构?数据结构是指数据元素之间的关系,以及相应的操作。

它研究如何组织、存储和管理数据,以及如何进行高效的数据操作。

2. 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。

线性结构包括数组、链表、栈和队列;非线性结构包括树和图。

3. 什么是算法?算法是解决特定问题的一系列有序步骤。

它描述了如何输入数据、处理数据,并产生期望的输出结果。

4. 算法的特性有哪些?算法具有确定性、有限性、输入、输出和可行性这五个特性。

5. 数据结构和算法之间的关系是什么?数据结构是算法的基础,算法操作的对象是数据结构。

第二章:线性表1. 顺序表的两种实现方式是什么?顺序表可以通过静态分配或动态分配的方式实现。

静态分配使用数组,动态分配使用指针和动态内存分配。

2. 单链表的特点是什么?单链表由节点组成,每个节点包含数据和一个指向下一个节点的指针。

它的插入和删除操作效率高,但是查找效率较低。

3. 循环链表和双向链表分别是什么?循环链表是一种特殊的单链表,在尾节点的指针指向头节点。

双向链表每个节点都有一个指向前一个节点和后一个节点的指针。

4. 链表和顺序表的区别是什么?链表的插入和删除操作效率更高,但是查找操作效率较低;顺序表的插入和删除操作效率较低,但是查找操作效率较高。

第三章:栈和队列1. 栈是什么?栈是一种特殊的线性表,只能在表的一端进行插入和删除操作。

后进先出(LIFO)是栈的特点。

2. 队列是什么?队列是一种特殊的线性表,只能在表的一端进行插入操作,在另一端进行删除操作。

先进先出(FIFO)是队列的特点。

3. 栈和队列的应用有哪些?栈和队列在计算机科学中有广泛的应用,例如浏览器的前进后退功能使用了栈,操作系统的进程调度使用了队列。

4. 栈和队列有哪些实现方式?栈和队列可以使用数组或链表来实现,还有更为复杂的如双端队列和优先队列。

数据结构(c )课后习题答案

数据结构(c )课后习题答案

数据结构(c )课后习题答案数据结构(C)课后习题答案在学习数据结构(C)课程时,课后习题是非常重要的一部分。

通过完成这些习题,我们可以加深对数据结构的理解,提高编程能力,并且更好地掌握C语言的运用。

下面我们就来看看一些常见的数据结构(C)课后习题答案。

1. 链表的创建和遍历链表是数据结构中常见的一种,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

在C语言中,我们可以通过动态内存分配来创建链表,并且可以使用指针来进行遍历。

下面是一个简单的链表创建和遍历的示例代码:```c#include <stdio.h>#include <stdlib.h>struct Node{int data;struct Node *next;};void printList(struct Node *node){while (node != NULL){printf("%d ", node->data);node = node->next;}}int main(){struct Node *head = NULL;struct Node *second = NULL;struct Node *third = NULL;head = (struct Node *)malloc(sizeof(struct Node)); second = (struct Node *)malloc(sizeof(struct Node)); third = (struct Node *)malloc(sizeof(struct Node)); head->data = 1;head->next = second;second->data = 2;second->next = third;third->data = 3;third->next = NULL;printList(head);return 0;}```2. 栈的实现栈是一种后进先出(LIFO)的数据结构,可以使用数组或链表来实现。

数据结构实用教程(第三版)课后答案

数据结构实用教程(第三版)课后答案

数据结构实用教程( 第三版) 课后答案file:///D|/ ------------------ 上架商品---------------------- / 数据结构实用教程( 第三版)课后答案(徐孝凯著)清华大学/第一章绪论.txt第一章绪习题一一、单选题1. 一个数组元数a[i] 与( A ) 的表示等价。

A *(a+i)B a+iC *a+iD &a+i2. 对于两个函数,若函数名相同,但只是( C) 不同则不是重载函数。

A 参数类型B 参数个数C 函数类型3. 若需要利用形参直接访问实参,则应把形参变量说明为(B) 参数。

A 指针B 引用C 值4. 下面程序段的复杂度为(C ) 。

for(int i=0;i<m;i++)for(int j=0;j<n;j++)a[i][j]=i*j;A O(m2)B O(n2)C O(m*n)D O(m+n)5. 执行下面程序段时,执行S语句的次数为(D )。

for(int i=1;i<=n;i++)for(int j=1; j<=i;j++)S;A n2B n2/2C n(n+1)D n(n+1)/26. 下面算法的时间复杂度为( B) 。

int f(unsigned int n){if(n==0||n==1) return 1;Else return n*f(n-1);}A O(1)B O(n)C O(n2)D O(n!)二、填空题1. 数据的逻辑结构被除数分为集合结构、线性结构、树型结构和图形结构四种。

2. 数据的存储结构被分为顺序结构、结构、索引结构和散列结构四种。

3. 在线性结构、树型结构和图形结构中,前驱和后继结点之间分别存在着1 对1 、1 对N 和M对N的关系。

4. 一种抽象数据类型包括数据和操作两个部分。

5. 当一个形参类型的长度较大时,应最好说明为引用,以节省参数值的传输时间和存储参数的空间。

6. 当需要用一个形参访问对应的实参时,则该形参应说明为引用。

数据结构习题参考答案

数据结构习题参考答案

数据结构习题参考答案一、栈和队列1. 栈是一种具有后进先出(Last In First Out)特性的线性数据结构。

常用方法:- push(x): 将元素x压入栈顶;- pop(): 弹出栈顶元素;- top(): 返回栈顶元素;- isEmpty(): 判断栈是否为空;例题解答:(1)题目描述:使用栈实现队列的功能。

解答:使用两个栈,一个用于入队操作,一个用于出队操作。

入队操作:直接将元素压入入队栈中;出队操作:如果出队栈为空,则将入队栈的元素逐个弹出并压入出队栈,此时出队栈的栈顶元素即为要弹出的元素。

复杂度分析:入队操作的时间复杂度为O(1),出队操作的平均时间复杂度为O(1)。

(2)题目描述:判断括号序列是否合法,即括号是否完全匹配。

解答:使用栈来处理括号序列,遇到左括号则入栈,遇到右括号则与栈顶元素进行匹配,如果匹配成功则继续处理剩余字符,如果不匹配则判定为非法序列。

算法步骤:- 初始化一个空栈;- 从左到右遍历括号序列,对于每个字符执行以下操作:- 如果是左括号,则将其入栈;- 如果是右括号,则将其与栈顶元素进行匹配:- 如果栈为空,则判定为非法序列;- 如果栈顶元素与当前字符匹配,则将栈顶元素出栈,继续处理剩余字符;- 如果栈顶元素与当前字符不匹配,则判定为非法序列。

- 遍历结束后,如果栈为空,则括号序列合法;否则,括号序列非法。

复杂度分析:时间复杂度为O(n),其中n为括号序列的长度。

2. 队列是一种具有先进先出(First In First Out)特性的线性数据结构。

常用方法:- enqueue(x): 将元素x入队;- dequeue(): 出队并返回队首元素;- getFront(): 返回队首元素;- isEmpty(): 判断队列是否为空;例题解答:(1)题目描述:使用队列实现栈的功能。

解答:使用两个队列,一个用于入栈操作,一个用于出栈操作。

入栈操作:直接将元素入队入栈队列中;出栈操作:如果出栈队列为空,则将入栈队列的元素逐个出队并入队出栈队列,此时出栈队列的队首元素即为要出栈的元素。

数据结构课后习题答案

数据结构课后习题答案

第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。

【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。

⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。

【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。

【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。

【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。

【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。

【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。

【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。

2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。

A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。

⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。

则表示该遗产继承关系的最合适的数据结构应该是()。

数据结构课后习题答案

数据结构课后习题答案

数据结构课后习题答案第1章绪论一、基础知识题1.1 简述下列概念数据,数据元素,数据类型,数据结构,逻辑结构,存储结构,算法。

【解答】数据是信息的载体,是描述客观事物的数、字符,以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。

数据元素是数据的基本单位。

在不同的条件下,数据元素又可称为元素、结点、顶点、记录等。

数据类型是对数据的取值范围、数据元素之间的结构以及允许施加操作的一种总体描述。

每一种计算机程序设计语言都定义有自己的数据类型。

“数据结构”这一术语有两种含义,一是作为一门课程的名称;二是作为一个科学的概念。

作为科学概念,目前尚无公认定义,一般认为,讨论数据结构要包括三个方面,一是数据的逻辑结构,二是数据的存储结构,三是对数据进行的操作(运算)。

而数据类型是值的集合和操作的集合,可以看作是已实现了的数据结构,后者是前者的一种简化情况。

数据的逻辑结构反映数据元素之间的逻辑关系(即数据元素之间的关联方式或“邻接关系”),数据的存储结构是数据结构在计算机中的表示,包括数据元素的表示及其关系的表示。

数据的运算是对数据定义的一组操作,运算是定义在逻辑结构上的,和存储结构无关,而运算的实现则依赖于存储结构。

数据结构在计算机中的表示称为物理结构,又称存储结构。

是逻辑结构在存储器中的映像,包括数据元素的表示和关系的表示。

逻辑结构与计算机无关。

算法是对特定问题求解步骤的一种描述,是指令的有限序列。

其中每一条指令表示一个或多个操作。

一个算法应该具有下列特性:有穷性、确定性、可行性、输入和输出。

1.2数据的逻辑结构分哪几种,为什么说逻辑结构是数据组织的主要方面?【解答】数据的逻辑结构分为线性结构和非线性结构。

(也可以分为集合、线性结构、树形结构和图形即网状结构)。

逻辑结构是数据组织的某种“本质性”的东西:(1)逻辑结构与数据元素本身的形式、内容无关。

(2)逻辑结构与数据元素的相对位置无关。

(3)逻辑结构与所含数据元素的个数无关。

《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)

1 填空题(1)数据元素(2)数据项数据元素(3)集合线性结构树结构图结构(4)顺序存储链接存储数据元素数据元素之间的关系(5)零或多个输入一个或多个输出有穷性确定性可行性(6)自然语言程序设计语言流程图伪代码,伪代码(7)问题规模(8)O(1) O(nlog2n)2 选择题(1)C D (2)B (3) B (4) A (5) D (6)A (7) C (8) C E3 判断题×××√×第二章1 填空题(1)表长一半表长位置(2)108(3)p->next=(p->next)->next;(4)运算方便(5)p->next=head;(6)s->next=rear->next rear->next=s; rear=s;q=rear->next->next; rear->next->next=q->next; delete q;(7)O(1) O(n)(8)循环单链表循环双链表双链表2 选择题(1) A B (2) D (3) B (4) A (5) A (6) D(7) B(8) B(9) C(10)B(11)B(12)D(13)A(14)A3 判断题×××××1 填空题(1)1003H(2)顺序栈和链栈top=-1或top==NULL top==数组长度或内存无可用空间(3)栈(4)abc+*d-(5)后进先出先进先出操作位置受限(6)假溢出(7)(rear-front+n)% n(8)O(1) O(n)2 选择题(1) C (2) D (3) C (4) B(5) B(6) B(7) D(8) A(9) C3 判断题×√√××第四章1 填空题(1)数据元素的类型是字符(2)长度相等且对应位置字符相等(3)存取修改顺序存储(4)1140(5)d+41(6)三元组顺序表十字链表2 选择题(1) B (2) D E K (3) B (4) C(5) D(6) C(7) D3 判断题×√√××1 填空题(1)有且仅有一个互不相交(2)度孩子双亲(3)2i-1(n+1)/2 (n-1)/2 (4)2h-1 2h-1(5)2k-1(6)50(7)12(8)CDBGFEA (9)2n n-1 n+1 (10)n n-12 选择题(1) D (2) D (3) B (4) C (5) B C (6) D(7) A(8) A B(9) D A(10)B(11)B(12)C(13)D(14)C3 判断题×√×√×第六章1 填空题(1)0 n(n-1)/2 0 n(n-1) (2)自身(3)邻接矩阵邻接表(4)O(n+e)(5)第j列所有元素之和(6)出度(7)前序栈层序队列(8)O(n2) O(elog2e) (9)回路(10)v i v j v k2 选择题(1) c (2) A G (3) C (4) B (5) D (6) C F(7) B(8) D(9) A(10)A(11)A(12)C(13)A(14)C C F(15)B3 判断题√√××××√×1 填空题(1)顺序存储和链接存储顺序存储按照关键码有序(2) 1 ,7(3)8,59/15(4) 4(5)62(6)开放定址法拉链法(7)散列查找(8)通过关键码计算记录的存储地址并进行一定的比较2 选择题(1) B (2) D B (3) A D (4) D (5) A(6) C(7) C(8) B(9) D(10)A(11)C(12)D3 判断题×××××第八章1 填空题(1)查找(2)正序n-1 反序n(n-1)/2 (3) 3(4) 3(5)O(nlog2n) O(n)(6)n-1(7)50(8)602 选择题(1) C (2) C (3) C (4) B (5) A (6) A(7) B C B(8) C(9) D(10)A D(11)B(12)D,B,E,A,C(13)C,A,D,B,B,D,F(14)C(15)D3 判断题×√××√。

数据结构课后习题答案1--7

数据结构课后习题答案1--7

数据结构课后习题答案1--7题目1:请你设计一个栈数据结构,使其具备以下功能:可以在O(1)的时间复杂度内获取栈的最小元素。

解答1:要实现在O(1)的时间复杂度内获取栈的最小元素,可以使用两个栈来实现。

一个栈用来保存原始数据,另一个栈用来保存当前栈的最小元素。

具体实现如下:1. 初始化两个栈:stack和min_stack,其中stack用于保存所有元素,min_stack用于保存当前栈中的最小元素。

2. 插入元素时,先将元素插入stack中,然后判断插入的元素是否比min_stack的栈顶元素小,如果是,则将元素也插入到min_stack中;如果不是,则将min_stack的栈顶元素再次插入到min_stack中。

3. 删除元素时,分别从stack和min_stack中弹出栈顶元素。

这样,min_stack的栈顶元素始终是stack中的最小元素。

题目2:请你设计一个队列数据结构,使其具备以下功能:可以在O(1)的时间复杂度内获取队列的最大元素。

解答2:要实现在O(1)的时间复杂度内获取队列的最大元素,可以使用两个队列来实现。

一个队列用来保存原始数据,另一个队列用来保存当前队列的最大元素。

具体实现如下:1. 初始化两个队列:queue和max_queue,其中queue用于保存所有元素,max_queue用于保存当前队列中的最大元素。

2. 插入元素时,先将元素插入queue中,然后判断插入的元素是否比max_queue的队尾元素大,如果是,则将元素也插入到max_queue的队尾;如果不是,则将max_queue中所有比插入元素小的元素都弹出,再将插入元素插入到max_queue的队尾。

3. 删除元素时,分别从queue和max_queue中弹出队头元素。

这样,max_queue的队头元素始终是queue中的最大元素。

题目3:请你设计一个栈数据结构,使其除了具有常规的入栈和出栈功能外,还具备以下功能:能够在O(1)的时间复杂度内获取栈中的最大元素。

数据结构实用教程(第三版)课后答案

数据结构实用教程(第三版)课后答案

数据结构实用教程 (第三版) 课后答案file:///D|/-------------------上架商品---------------/数据结构实用教程 (第三版) 课后答案 (徐孝凯著) 清华大学出版社/第一章绪论.txt第一章绪习题一一、单选题1.一个数组元数a[i]与( A )的表示等价。

A *(a+i)B a+iC *a+iD &a+i2.对于两个函数,若函数名相同,但只是( C) 不同则不是重载函数。

A 参数类型B 参数个数C 函数类型3.若需要利用形参直接访问实参,则应把形参变量说明为 (B) 参数。

A 指针B 引用C 值4.下面程序段的复杂度为 (C )。

for(int i=0;i<m;i++)for(int j=0;j<n;j++)a[i][j]=i*j;A O(m2)B O(n2)C O(m*n)D O(m+n)5.执行下面程序段时,执行S语句的次数为 (D )。

for(int i=1;i<=n;i++)for(int j=1; j<=i;j++)S;A n2B n2/2C n(n+1)D n(n+1)/26.下面算法的时间复杂度为( B) 。

int f(unsigned int n){if(n==0||n==1) return 1;Else return n*f(n-1);}A O(1)B O(n)C O(n2)D O(n!)二、填空题1.数据的逻辑结构被除数分为集合结构、线性结构、树型结构和图形结构四种。

2.数据的存储结构被分为顺序结构、链接结构、索引结构和散列结构四种。

3.在线性结构、树型结构和图形结构中,前驱和后继结点之间分别存在着 1对1 、 1对N 和M对N 的关系。

4.一种抽象数据类型包括数据和操作两个部分。

5.当一个形参类型的长度较大时,应最好说明为引用,以节省参数值的传输时间和存储参数的空间。

6.当需要用一个形参访问对应的实参时,则该形参应说明为引用。

数据结构课后习题答案

数据结构课后习题答案

数据结构课后习题答案数据结构习题集答案第1章绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

解:数据是对客观事物的符号表示。

在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

数据对象是性质相同的数据元素的集合,是数据的一个子集。

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

存储结构是数据结构在计算机中的表示。

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。

是对一般数据类型的扩展。

1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。

解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。

一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。

抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。

在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。

1.3 设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r = 试按图论中图的画法惯例画出其逻辑结构图。

解:1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。

解:ADT Complex{数据对象:D={r,i|r,i 为实数} 数据关系:R={} 基本操作:InitComplex(&C,re,im)操作结果:构造一个复数C ,其实部和虚部分别为re 和imDestroyCmoplex(&C)操作结果:销毁复数CGet(C,k,&e)操作结果:用e 返回复数C 的第k 元的值Put(&C,k,e)操作结果:改变复数C的第k元的值为eIsAscending(C)操作结果:如果复数C的两个元素按升序排列,则返回1,否则返回0IsDescending(C)操作结果:如果复数C的两个元素按降序排列,则返回1,否则返回0Max(C,&e)操作结果:用e返回复数C的两个元素中值较大的一个Min(C,&e)操作结果:用e返回复数C的两个元素中值较小的一个}ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={}基本操作:InitRationalNumber(&R,s,m)操作结果:构造一个有理数R,其分子和分母分别为s和m DestroyRationalNumber(&R)操作结果:销毁有理数RGet(R,k,&e)操作结果:用e返回有理数R的第k元的值Put(&R,k,e)操作结果:改变有理数R的第k元的值为eIsAscending(R)操作结果:若有理数R的两个元素按升序排列,则返回1,否则返回0IsDescending(R)操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回0Max(R,&e)操作结果:用e返回有理数R的两个元素中值较大的一个Min(R,&e)操作结果:用e返回有理数R的两个元素中值较小的一个}ADT RationalNumber1.5 试画出与下列程序段等价的框图。

数据结构教程,含习题和答案

数据结构教程,含习题和答案

第一章:概论(包括习题与答案及要点)本章的重点是了解数据结构的逻辑结构、存储结构、数据的运算三方面的概念及相互关系,难点是算法复杂度的分析方法。

需要达到<识记>层次的基本概念和术语有:数据、数据元素、数据项、数据结构。

特别是数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系。

数据结构的两大类逻辑结构和四种常用的存储表示方法。

需要达到<领会>层次的内容有算法、算法的时间复杂度和空间复杂度、最坏的和平均时间复杂度等概念,算法描述和算法分析的方法、对一般的算法要能分析出时间复杂度。

-------------------------------------------------------------------------------- 对于基本概念,仔细看书就能够理解,这里简单提一下:数据就是指能够被计算机识别、存储和加工处理的信息的载体。

数据元素是数据的基本单位,有时一个数据元素可以由若干个数据项组成。

数据项是具有独立含义的最小标识单位。

如整数这个集合中,10这个数就可称是一个数据元素.又比如在一个数据库(关系式数据库)中,一个记录可称为一个数据元素,而这个元素中的某一字段就是一个数据项。

数据结构的定义虽然没有标准,但是它包括以下三方面内容:逻辑结构、存储结构、和对数据的操作。

这一段比较重要,我用自己的语言来说明一下,大家看看是不是这样。

比如一个表(数据库),我们就称它为一个数据结构,它由很多记录(数据元素)组成,每个元素又包括很多字段(数据项)组成。

那么这张表的逻辑结构是怎么样的呢? 我们分析数据结构都是从结点(其实也就是元素、记录、顶点,虽然在各种情况下所用名字不同,但说的是同一个东东)之间的关系来分析的,对于这个表中的任一个记录(结点),它只有一个直接前趋,只有一个直接后继(前趋后继就是前相邻后相邻的意思),整个表只有一个开始结点和一个终端结点,那我们知道了这些关系就能明白这个表的逻辑结构了。

《数据结构》课后参考答案

《数据结构》课后参考答案

《数据结构》课后参考答案第一题:1. 什么是数据结构?数据结构是一种组织和存储数据的方式,它涉及到数据的逻辑关系、数据元素之间的操作和存储方式等。

数据结构可以帮助我们更有效地组织和管理数据,提高程序的运行效率。

第二题:2. 请简述线性表和链表的区别。

线性表是一种线性结构,其中的数据元素按照线性的顺序排列。

线性表可以使用数组实现,也可以使用链表实现。

链表是一种动态数据结构,它通过节点之间的指针连接来存储数据元素。

主要区别:- 存储方式:线性表使用静态的连续内存空间存储,而链表使用动态的节点存储,并通过指针连接节点。

- 插入和删除操作:线性表需要移动数组中的元素,而链表只需要修改指针指向即可。

- 访问效率:线性表可以通过下标直接访问元素,访问效率高;链表需要从头节点开始逐个遍历,访问效率较低。

第三题:3. 请描述栈和队列的特点及其应用场景。

栈和队列都是常用的线性数据结构,它们在不同的场景中有着不同的特点和应用。

栈的特点:- 先进后出(LIFO)的数据结构。

- 只能在栈顶进行插入和删除操作。

- 用途广泛,如函数调用、表达式求值、计算机内存的管理等。

队列的特点:- 先进先出(FIFO)的数据结构。

- 可以在队尾插入元素,在队头删除元素。

- 用途广泛,如任务调度、消息传递、广度优先搜索等。

第四题:4. 请简述树和图的区别以及它们的应用场景。

树和图都是常用的非线性数据结构,它们之间有着一些区别和各自的应用场景。

树的特点:- 由节点和边组成的层次结构。

- 每个节点最多有一个父节点和多个子节点。

- 常用的树结构有二叉树、平衡二叉树、B树等。

- 应用场景包括文件系统、数据库索引等。

图的特点:- 由节点和边组成的非线性结构。

- 节点之间的关系可以是任意的。

- 常用的图结构有有向图、无向图、加权图等。

- 应用场景包括社交网络、路由算法、拓扑排序等。

综上所述,数据结构是计算机科学的重要基础,它为我们解决实际问题提供了有力的工具和方法。

《数据结构》教材课后习题+答案

《数据结构》教材课后习题+答案

《数据结构》教材课后习题+答案数据结构第一章介绍数据结构是计算机科学中重要的概念,它涉及到组织和存储数据的方法和技术。

数据结构的选择对于算法的效率有着重要的影响。

本教材为读者提供了丰富的课后习题,以帮助读者巩固所学知识并提高解决问题的能力。

下面是一些选定的习题及其答案,供读者参考。

第二章线性表习题一:给定一个顺序表L,编写一个算法,实现将其中元素逆置的功能。

答案一:算法思路:1. 初始化两个指针i和j,分别指向线性表L的首尾两个元素2. 对于L中的每一个元素,通过交换i和j所指向的元素,将元素逆置3. 当i>=j时,停止逆置算法实现:```pythondef reverse_list(L):i, j = 0, len(L)-1while i < j:L[i], L[j] = L[j], L[i]i += 1j -= 1```习题二:给定两个线性表A和B,编写一个算法,将线性表B中的元素按顺序插入到线性表A中。

答案二:算法思路:1. 遍历线性表B中的每一个元素2. 将B中的元素依次插入到A的末尾算法实现:```pythondef merge_lists(A, B):for element in B:A.append(element)```第三章栈和队列习题一:编写一个算法,判断一个表达式中的括号是否匹配。

表达式中的括号包括小括号"()"、中括号"[]"和大括号"{}"。

答案一:算法思路:1. 遍历表达式中的每一个字符2. 当遇到左括号时,将其推入栈中3. 当遇到右括号时,判断栈顶元素是否与其匹配4. 当遇到其他字符时,继续遍历下一个字符5. 最后判断栈是否为空,若为空则表示括号匹配算法实现:```pythondef is_matching(expression):stack = []for char in expression:if char in "([{":stack.append(char)elif char in ")]}":if not stack:return Falseelif (char == ")" and stack[-1] == "(") or (char == "]" and stack[-1] == "[") or (char == "}" and stack[-1] == "{"):stack.pop()else:return Falsereturn not stack```习题二:利用两个栈实现一个队列。

数据结构实用教程参考答案

数据结构实用教程参考答案

数据结构实用教程参考答案数据结构实用教程参考答案引言:数据结构是计算机科学中非常重要的一门学科,它研究如何组织和存储数据以便高效地访问和操作。

对于计算机程序员来说,掌握数据结构的知识是必不可少的。

本文将提供一些数据结构实用教程的参考答案,帮助读者更好地理解和应用这些概念。

一、数组(Array):数组是最简单的数据结构之一,它由一组有序的元素组成,可以通过索引来访问和修改元素。

以下是一些常见问题的参考答案:1. 如何在数组中查找一个元素?可以使用线性搜索或二分查找算法来实现。

线性搜索逐个比较元素,直到找到目标元素或搜索完整个数组。

二分查找算法则要求数组有序,通过递归或循环将数组分成两半进行查找,直到找到目标元素或确定不存在。

2. 如何在数组中插入和删除元素?插入元素时,需要将插入位置后的元素后移一位,然后将新元素插入到指定位置。

删除元素时,需要将删除位置后的元素前移一位,然后将数组长度减一。

这些操作的时间复杂度为O(n),其中n为数组长度。

二、链表(Linked List):链表是一种动态数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

以下是一些常见问题的参考答案:1. 如何在链表中查找一个元素?可以使用线性搜索算法来实现,从链表头节点开始逐个比较元素,直到找到目标元素或搜索完整个链表。

2. 如何在链表中插入和删除元素?插入元素时,需要创建一个新节点,并将其指针指向插入位置的下一个节点,然后将插入位置的前一个节点的指针指向新节点。

删除元素时,需要修改前一个节点的指针,使其指向删除位置的下一个节点。

这些操作的时间复杂度为O(1),即常数时间。

三、栈(Stack)和队列(Queue):栈和队列是两种常见的数据结构,它们都是限制插入和删除操作的顺序表。

以下是一些常见问题的参考答案:1. 如何实现栈和队列的插入和删除操作?栈的插入和删除操作遵循“先进后出”的原则,可以使用数组或链表来实现。

数据结构实用教程习题答案

数据结构实用教程习题答案

数据结构实⽤教程习题答案1 绪论1.1回答下列概念:数据结构,数据的逻辑结构,数据的存储结构,算法数据结构:按照某种逻辑关系组织起来的⼀批数据,⽤⼀定的存储⽅式存储在计算机的存储器中,并在这些数据上定义⼀个运算的集合,就称为⼀个数据结构。

数据的逻辑结构:数据元素之间的逻辑关系,是根据实际问题抽象出来的数学模型。

数据的存储结构:是指数据的逻辑结构到计算机存储器的映射。

算法:是指对数据元素进⾏加⼯和处理1.2数据结构研究的三⽅⾯内容是什么?它们之间有什么联系和区别?三⽅⾯内容: 数据的逻辑结构、数据的存储结构和数据运算的集合。

联系和区别:数据的逻辑结构是数学模型,数据的存储结构是指逻辑结构到存储区域的映射,运算是定义在逻辑结构上,实现在存储结构上。

1.3简述数据结构中讨论的三种经典结构及其逻辑特征。

三种经典结构:线性表、树和图。

线性表:有且仅有⼀个开始结点和⼀个终端结点,其余的内部结点都有且仅有⼀个前趋结点和⼀个后继结点,数据元素间存在着⼀对⼀的相互关系。

树:有且仅有⼀个开始结点,可有若⼲个终端结点,其余的内部结点都有且仅有⼀个前趋结点,可以有若⼲个后继结点,数据元素间存在着⼀对多的层次关系。

图:可有若⼲个开始结点和终端结点,其余的内部结点可以有若⼲个前趋结点和若⼲个后继结点,数据元素间存在着多对多的⽹状关系。

1.4实现数据存储结构的常⽤存储⽅法有哪⼏种?简述各种⽅法的基本思想。

常⽤存储⽅法有四种:顺序存储、链接存储、索引存储、散列存储。

各种⽅法的基本思想:顺序存储:把逻辑上相邻的数据元素存储在物理位置上相邻的存储单元⾥。

链接存储:通过附加指针域表⽰数据元素之间的关系。

索引存储:除了存储数据元素,还要建⽴附加索引表来标识数据元素的地址。

散列存储:根据数据元素的关键字直接计算出该结点的存储地址,称为关键字-地址转换法。

1.5算法的特性是什么?如何定性的评价⼀个算法的优劣?算法的特性:有穷性、确定性、可⾏性、输⼊、输出。

数据结构实用教程课后习题答案万健C++

数据结构实用教程课后习题答案万健C++

第2章作业参考答案1. B2. A,D3. 1,n/2,(n-1)/2,n,0,04.templete <class ElemType>void SqList <ElemType> :: reverse(){ElemType e;for (int i = 0; i < len / 2; i++){e = elem[i];elem[i] = elem[len – i -1];elem[len – i – 1] = e;}}templete <class ElemType>void LinkList <ElemType> :: reverse(){if (!head->next) return;LinkNode <ElemType> *q = head -> next, *p = q -> next;q -> next = NULL;tail = q;while (p){q = p;p = p –> next;q –> next = head -> next;head -> next = q;}}8.void add(LinkList <Monomial> &pa, LinkList <Monomial> &pb) {int pa_len, pb_len, i, j;pa_len = pa.Length();pb_len = pb.Length();i = j = 1;Monomial pa_e, pb_e;pa.GetElem(pa_e, 1);pb.GetElem(pb_e, 1);while (i <= pa_len && j <= pb_len){if (pa_e.exp < pb_e.exp){i++;if (i <= pa_len) pa.GetElem(pa_e, i);}else if (pa_e.exp > pb_e.exp){pa.Insert(pb_e, i);i++;pa_len++;j++;if (j <= pb_len) pb.GetElem(pb_e, j);}else{if (pa_e.coef += pb_e.coef){pa.SetElem(pa_e, i);i++;}else{pa.Delete(pa_e, i);pa_len--;}j++;if (i <= pa_len) pa.GetElem(pa_e, i);if (j <= pb_len) pb.GetElem(pb_e, j);}}while (j <= pb_len){pb.GetElem(pb_e, j++);pa.Append(pb_e);}}第3章作业参考答案1.1,4,3,5,2)能,IOIIIOOIOO;(1,4,2,3,5)不能,因为4先于3和2出栈,4出栈时,2和3都在栈中,且2压在3之下,故只能3先出栈才能2出栈。

数据结构课后习题答案-完整版

数据结构课后习题答案-完整版

数据结构课后习题答案-完整版下面是《数据结构课后习题答案-完整版》的内容:---第一章:数组1. 题目:给定一个整数数组,判断是否存在两个元素之和等于目标值。

答案:使用双指针法,首先将数组排序,然后设置左指针指向数组头部,右指针指向数组尾部。

如果左指针和右指针指向的元素之和小于目标值,则左指针右移;如果大于目标值,则右指针左移;如果等于目标值,则找到了两个元素之和等于目标值的情况。

2. 题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数的下标。

答案:使用哈希表,在遍历数组的过程中,将每个元素的值和下标存储在哈希表中。

遍历到当前元素时,检查目标值与当前元素的差值是否在哈希表中,如果存在,则找到了两个数的下标。

---第二章:链表1. 题目:给定一个链表,判断链表中是否存在环。

答案:使用快慢指针法,定义两个指针,一个指针每次向前移动一个节点,另一个指针每次向前移动两个节点。

如果存在环,则两个指针必定会相遇。

2. 题目:给定一个链表,删除链表的倒数第N个节点。

答案:使用双指针法,定义两个指针,一个指针先移动N个节点,然后两个指针同时向前移动,直到第一个指针到达链表尾部。

此时第二个指针指向的节点即为要删除的节点。

---第三章:栈和队列1. 题目:设计一个栈,使得可以在常数时间内获取栈中的最小元素。

答案:使用辅助栈来保存当前栈中的最小元素。

每次压栈操作时,将当前元素与辅助栈的栈顶元素比较,只有当前元素较小才将其压入辅助栈。

2. 题目:设计一个队列,使得可以在常数时间内获取队列中的最大元素。

答案:使用双端队列来保存当前队列中的最大值。

每次入队操作时,将当前元素与双端队列的末尾元素比较,只有当前元素较大才将其压入双端队列。

---第四章:树和二叉树1. 题目:给定一个二叉树,判断它是否是平衡二叉树。

答案:通过递归遍历二叉树的每个节点,计算每个节点的左子树高度和右子树高度的差值。

如果任意节点的差值大于1,则该二叉树不是平衡二叉树。

(完整版) 《数据结构》教材课后习题+答案

(完整版) 《数据结构》教材课后习题+答案

第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。

A.存储结构B.存储实现C.逻辑结构D.运算实现(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。

A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等(4)以下说法正确的是()。

A.数据元素是数据的最小单位B.数据项是数据的基本单位C.数据结构是带有结构的各数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是()。

A.顺序队列 B. 链表 C. 有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构A.树B.字符串C.队D.栈6.试分析下面各程序段的时间复杂度。

(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 绪论1.1回答下列概念:数据结构,数据的逻辑结构,数据的存储结构,算法数据结构:按照某种逻辑关系组织起来的一批数据,用一定的存储方式存储在计算机的存储器中,并在这些数据上定义一个运算的集合,就称为一个数据结构。

数据的逻辑结构:数据元素之间的逻辑关系,是根据实际问题抽象出来的数学模型。

数据的存储结构:是指数据的逻辑结构到计算机存储器的映射。

算法:是指对数据元素进行加工和处理1.2数据结构研究的三方面内容是什么?它们之间有什么联系和区别?三方面内容: 数据的逻辑结构、数据的存储结构和数据运算的集合。

联系和区别:数据的逻辑结构是数学模型,数据的存储结构是指逻辑结构到存储区域的映射,运算是定义在逻辑结构上,实现在存储结构上。

1.3简述数据结构中讨论的三种经典结构及其逻辑特征。

三种经典结构:线性表、树和图。

线性表:有且仅有一个开始结点和一个终端结点,其余的内部结点都有且仅有一个前趋结点和一个后继结点,数据元素间存在着一对一的相互关系。

树:有且仅有一个开始结点,可有若干个终端结点,其余的内部结点都有且仅有一个前趋结点,可以有若干个后继结点,数据元素间存在着一对多的层次关系。

图:可有若干个开始结点和终端结点,其余的内部结点可以有若干个前趋结点和若干个后继结点,数据元素间存在着多对多的网状关系。

1.4实现数据存储结构的常用存储方法有哪几种?简述各种方法的基本思想。

常用存储方法有四种:顺序存储、链接存储、索引存储、散列存储。

各种方法的基本思想:顺序存储:把逻辑上相邻的数据元素存储在物理位置上相邻的存储单元里。

链接存储:通过附加指针域表示数据元素之间的关系。

索引存储:除了存储数据元素,还要建立附加索引表来标识数据元素的地址。

散列存储:根据数据元素的关键字直接计算出该结点的存储地址,称为关键字-地址转换法。

1.5算法的特性是什么?如何定性的评价一个算法的优劣?算法的特性:有穷性、确定性、可行性、输入、输出。

算法的定性评价标准有:正确性、可读性、健壮性、简单性。

1.6算法的定量评价标准是什么?算法的定量评价标准有:时间复杂度和空间复杂度。

时间复杂度:是一个算法运行时所耗费的系统时间,也就是算法的时间效率。

空间复杂度:是一个算法运行时所耗费的存储空间,也就是算法的空间效率。

1.7 写出下列程序段中带标号语句的频度,并给出执行各程序段的时间复杂度(n为整数)。

(1)i=1; (2)s=1;while(i<n)do for(i=1;i<=n;i++)【1】i++; 【1】s=s*i;(3)s=0; (4)i=1;for(i=l;i<n;i++) while(i*i<=n)for (j=n;j>=i;j--) 【1】i++;【1】s=s+i+j;(5)i=1;(6)x=1;y=100;while(i<n)do do{【1】i=i*2; 【1】x++;y--;}While(x<y);答:(1) n-1, O(n) (2)n,O(n) (3)(n+2)(n-1)/2, O(n2)(4(5)㏒(n-1)+1,O(n) (6)50,O(1)2 线性表2.1 回答下列概念:线性结构,线性表,顺序表,单链表,静态链表线性结构:设Data_Structure =(D,S),r∈S,相对r,D中有且仅有一个开始结点和一个终端结点,其余的内部结点都有且仅有一个前趋和一个后继,则称Data_Structure是相对r的线性结构。

线性表:是具有相同属性的n(n≥0)个数据元素的有限序列。

顺序表:顺序表(Sequential List)是采用顺序存储结构的线性表。

单链表:每个结点只附加一个指向后继的指针域,这样的链表称为单链表(Single Linked List)静态链表:用数组实现的链表,指针就变换为数组的下标,结点即为数组中的下标变量,由于需要预先分配一个较大的数组空间,因此这种链表称之为静态链表。

2.2 比较顺序表和链表这两种线性表不同存储结构的特点。

1.逻辑关系的表示:顺序表隐含表示关系,链表显示表示关系。

2.存储密度:顺序表的存储密度大,而链表的存储密度小。

3.存储分配方式:顺序表的存储空间是预先静态分配的一块连续存储空间,在程序执行之前必须明确规定它的存储规模。

链表不用事先估计存储规模,动态分配和释放存储空间,存储空间可连续也可不连续。

4.存取方法:顺序表可以随机存取,链表必须顺序存取。

5.插入、删除操作:在顺序表中做插入、删除时平均移动表中一半的元素;在链表中作插入、删除时,只要修改指针域,而不需要移动元素。

所以顺序表的插入、删除效率低,链表的插入、删除效率高。

6.实现语言:顺序表容易实现,任何高级语言中都有数组类型。

而链表的操作是基于指针的,对于没有提供指针类型的高级语言,必须采用静态链表。

总之,两种存储结构各有长短,选择那一种由实际问题中的主要因素决定。

通常“较稳定”的线性表选择顺序存储,而频繁做插入、删除的线性表,即动态性较强的线性表宜选择链接存储。

2.3 已知长度为n的线性表A中的元素是整数,写算法求线性表中值大于item的元素个数。

分两种情况编写函数:(1)线性表采用顺序存储;(2)线性表采用单链表存储。

(1)线性表采用顺序存储#define MAX 1024typedef int DataType;typedef struct{ DataType data[MAX];int last;} SeqList;int LocateElem (SeqList *L, DataType item){ int i,j=0;for(i=0;i<=L->last ;i++)if( L->data[i] >item ) j++;return j;}(2)线性表采用单链表存储typedef int DataType;typedef struct Node{ DataType data;struct Node *next;}LinkList;LinkList *locateElem(LinkList *L, DataType item ){ LinkList *p=L->next;int i=0;while ( p ){if( p->data >item) i++; p=p->next;}return i ;}2.4 已知长度为n的线性表A中的元素是整数,写算法删除线性表中所有值为item的数据元素。

分两种情况编写函数:(1)线性表采用顺序存储;(2)线性表采用单链表存储。

(1)线性表采用顺序存储#define MAX 1024typedef int DataType;typedef struct{ DataType data[MAX];int last;} SeqList;int LocateElem (SeqList *L, DataType item){ int i=0;While(i<=L->last)if( L->data[i] ==item ){for(j=i+1;j<=L->last;j++) L->data[j-1]=L->data[j]; L->last --; }Else i++;}(2)线性表采用单链表存储typedef int DataType;typedef struct Node{ DataType data;struct Node *next;}LinkList;int deleteDupNode(LinkList *L, DataType item){ LinkList *p,*q,*r;q= L; p=L->next;while (p)if (p->data==item) {q->next=p->next; free(p); p=q->next;}else { q=p; p=p->next; }}2.5 设长度为Max的顺序表L中包含n个整数且递增有序。

试写一算法,将x 插入到顺序表的适当位置上,以保持表的有序性,并且分析算法的时间复杂度。

#define MAX 1024typedef int DataType;typedef struct{ DataType data[MAX];int last;} SeqList;int inserts(SeqList *L, DataType x){int i;if (L->last ==Max-1) {printf(“full”); return 0;}i= L->last;while(i>=0&& L->data[i] >x)L->data [i+1]= L->data [i--];L->data [i+1]=x; L->last ++; return 1;}2.6 设带头结点的单链表L中的数据元素是整型数且递增有序。

试写一算法,将x 插入到单链表的适当位置上,以保持表的有序性,并且分析算法的时间复杂度。

typedef int DataType;typedef struct Node{ DataType data;struct Node *next;}LinkList;void InsertList(LinkList *L,datetype x){LinkList *p,*s;s=(LinkList *)malloc(sizeof(Linklist));s->data=x;p=L;while((p->next)&&(p->next->data<x))p=p->next;s->next=p->next; p->next=s;}2.7 试写一算法实现对不带头结点的单链表H进行就地逆置。

typedef int DataType;typedef struct Node{ DataType data;struct Node *next;}LinkList;LinkList * Reverse(LinkList *H){ L inkList *p,*q;if (!H) return;p=H->next; q=H->next; H->next=NULL;While(q){q=q->next; p->next= H; H =p; p=q;}return H;}2.8 若带头结点的单链表L中的数据元素是整型数,编写算法对单链表L进行排序。

typedef int DataType;typedef struct Node{ DataType data;struct Node *next;}LinkList;void InsertList(LinkList *L){LinkList *p,*q,*s;if (!L->next ||!L->next->next) return;q= L->next->next; L->next->next= NULL;while(q){s=q; q=q->next;p=L;while((p->next)&&(p->next->data< s->data )) p=p->next;s->next=p->next; p->next=s;}}2.9 设单链表X和单链表Y分别存储了两个字符串,设计算法找出X中第一个不在Y中出现的字符。

相关文档
最新文档