栈和队列数据结构的特点

合集下载

数据结构练习题及答案

数据结构练习题及答案

数据结构练习题(一)一、单选题1.栈和队列的共同特点是( )。

A.只允许在端点处插入和删除元素B.都是先进后出C.都是先进先出D.没有共同点2.用链接方式存储的队列,在进行插入运算时( )。

A. 仅修改头指针B. 头、尾指针都要修改C. 仅修改尾指针D.头、尾指针可能都要修改3.以下数据结构中( )是非线性结构。

A. 队列B. 栈C. 线性表D. 二叉树4.设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在()位置。

脚注(10)表示用10进制表示。

A.688 B.678 C.692 D.6965.树最适合用来表示( )。

A.有序数据元素B.无序数据元素C.元素之间具有分支层次关系的数据D.元素之间无联系的数据6.二叉树的第k层的结点数最多为( )。

A.2k-1 B.2K+1 C.2K-1 D. 2k-17.若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为( )。

A. 1,2,3B. 9,5,2,3C. 9,5,3D. 9,4,2,38.对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K)=K %9作为散列函数,则散列地址为1的元素有()个。

A.1 B.2 C.3 D.49.设有6个结点的无向图,该图至少应有( )条边才能确保是一个连通图。

A.5B.6C.7D.8二、填空题1.通常从四个方面评价算法的质量:_________、_________、_________和_________。

2.一个算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为________。

3.假定一棵树的广义表表示为A(C,D(E,F,G),H(I,J)),则树中所含的结点数为__________个,树的深度为___________,树的度为_________。

数据结构基础栈和队列

数据结构基础栈和队列
②X=S[TOP],(退栈后的元素赋给X); ③TOP--,结束(栈指针减1,指向栈顶)。
栈的应用 十进制数N和其它d进制数的转换是实现计算的基本问题,
解决方法很多,下面给出一种算法原理: N=(N / d)×d+N % d (其中 / 为整除运算,%为求余运算)。
例如:(1348)10=(2504)8运算过程如下:
default:x=0; while (s[i]!=' ') x=x*10+s[i++]-'0'; stack[++top]=x;
break;
}
i++;
}
//while
return stack[top];
}
main() {
printf("input a string(@_over):"); gets(s); printf("result=%d",comp(s)); return 0; }
cout<<"Please enter a number(N) base 10:"; cin>>n; cout<<"please enter a number(d):"; cin>>d; do{
a[++i]=n%d; n=n/d; }while(n!=0); for (j=i;j>=1;j--)cout<<a[j]; return 0; }
集合
• 数据元素的物理结构有两种:顺序存储结构和链 式存储结构
• 顺序存储结构:用数据元素在存储器中的相对位 置来表示数据元素之间的逻辑关系。

吉林大学数据结构_堆栈、队列

吉林大学数据结构_堆栈、队列

链式栈——入栈算法
算法Push(item)
/*向栈顶指针为top的链式栈中压入一个元素item*/
P1. [创建新结点]
s<=AVAIL. data(s) ←item. next(s) ←top.
P2. [更新栈顶指针]
top ←s. ▍
链式栈——出栈算法
算法Pop(.item)
/*从栈顶指针为top的链式栈中弹出栈顶元素,并存放在变量 item中*/
链式队列——存取队首元素
算法QFront(.item) /*读取队首元素值并将其存入item*/ QD1.[队列空?] if front=null then (print “队空”. Return.) QD2.[存取] item ← data(front). ▍
P1. [栈空?]
IF top=NULL THEN (PRINT “栈空无法弹出”. RETRUN.)
P2. [出栈]
item ←data(top). q ←next(top). AVAIL<=top. top ←q. ▍
链式栈——存取栈顶元素
算法Peek(.item) /*将栈顶指针为top的链式栈的栈顶元素存放 在变量item中*/ P1. [栈空?] IF top=NULL THEN (PRINT “栈空”. RETRUN.) P2. [存取栈顶] item ←data(top). ▍
链式栈——栈清空
算法Clear() /*将栈顶指针为top的链式栈清空*/ C1. [逐一出栈,直至栈空] WHILE top≠NULL DO ( q ←next(top). AVAIL<=top. top ←q. )▍
顺序栈与链式栈的比较-1
• 空间复杂性:

常见数据结构及特点介绍

常见数据结构及特点介绍

常见数据结构及特点介绍常见的数据结构stack、heap、list、doubly-linked-list、queue、array(vector)、map、set、graphArray(数组)最简单⽽且应⽤最⼴泛的数据结构之⼀特征:使⽤连续的内存来存储、数组中的所有元素都是相同的类型或类型的衍⽣(同质数据结构)、元素可以通过下标直接访问LinkedList(链表)线性表的⼀种,最基本、最简单,也是最常⽤的数据结构特征:元素之间的关系是⼀对⼀的关系(除了第⼀个和最后⼀个元素,其他元素都是⾸尾相接)、顺序存储结构和链式存储结构两种存储⽅式Stack(栈)和队列相似,⼀个带有数据存储特征的数据结构特征:存储数据是先进后出的、栈只有⼀个出⼝,只能从栈顶部增加和移除元素,类似试管,只有⼀个⼝Heap(堆)⼀般情况下,堆叫⼆叉堆,近似完全⼆叉树的数据结构,⼀个⽗节点下⾯两个⼦节点,⼦节点下⼜分别两个⼦节点特征:⼦节点的键值或者索引总是⼩于它的⽗节点、每个节点的左右⼦树⼜是⼀个⼆叉堆、根节点最⼤的堆叫最⼤堆或者⼤根堆、最⼩的叫最⼩堆或者⼩根堆List(线性表)由另个或者多个数据元素组成的有限序列特征:线性表是⼀个序列、0个元素构成的线性表是空表、第⼀个元素⽆先驱、最后⼀个元素⽆后继、其他元素都只有⼀个先驱和后续、有长度,长度是元素个数,长度有限doubly-linked-list(双向链表)特征:每个元素都是⼀个对象,每个对象有⼀个关键字key和两个指针(next和prev),就是向前移动或者向后移动queue(队列)特征:先进先出(FIFO)、并发中使⽤、可以安全将对象从⼀个任务传给另⼀个任务set(集合)特征:保存从不重复的元素map(字典)特征:关联数组、也被叫做字典或者键值对graph(图)特征:通常使⽤邻接矩阵和邻接表表⽰、前者易实现但是对于稀疏矩阵会浪费较多空间、后者使⽤链表的⽅式存储信息但是对于图搜索时间复杂度较⾼。

第3章 栈

第3章 栈
// 若栈空,则返回1
// 否则返回0
(6)判栈满
int SFull(SeqStack *s) { if (s->top= =MAXLEN–1) return 1;// 若栈满,
则返回1
else return 0;
回0
// 否则返
}
2. 栈的链式存储结构
1.存储方式:同一般线性表的单链式存储结构 完全相同,但是应该确定链表的哪端对应与栈顶, 如果链表的表尾作为栈顶,则入,出栈操作的时 间复杂性为o(n)
int Push (SeqStack *s, elemtype x) { if (s->top= =MAXLEN–1) return 0;
// 栈满不能入栈,且返回 0
else { s->top++; s->elem[s->top]=x; // 栈不满,则压入元素x return 1;} // 进栈成功,返回1
如果链表的表头作为栈顶,则入,出栈操作的时间 复杂性为o(1),所以,一般把链表头作为栈顶.
链栈结构如下图所示。
data next
top 4 3 2 1 ^
栈顶
特点:减小溢出,提高空 间利用率.只有系统没 有空间了,才会溢出
栈底
图3-4 链栈示意图
2.链栈的实现
用链式存储结构实现的栈称为链栈。因为链栈的结点结 构与单链表的结构相同,通常就用单链表来实现,在此用 LinkStack表示,即有: typedef struct stacknode { elemtype data; struct stacknode *next; } stacknode;,* Linkstack;
// 分配最大的栈空间
typedef struct

数据结构名词解释

数据结构名词解释

数据结构名词解释数据结构名词解释1.数组(Array)数组是一种存储相同类型数据元素的线性数据结构,它使用连续的内存空间来存储元素。

数组的特点是随机访问快速,但插入和删除操作较慢。

2.链表(Linked List)链表是一种非连续存储数据结构,它由一系列节点构成,每个节点包含数据和指向下一个节点的指针。

链表的特点是插入和删除操作效率高,但随机访问较慢。

3.栈(Stack)栈是一种具有后进先出(Last-In-First-Out,LIFO)特点的线性数据结构。

栈的插入和删除操作都在同一端进行,即栈顶,而访问其他元素需要先把栈顶元素弹出。

4.队列(Queue)队列是一种具有先进先出(First-In-First-Out,FIFO)特点的线性数据结构。

队列的插入操作(入队)在队尾进行,删除操作(出队)在队头进行。

5.树(Tree)树是一种非线性数据结构,它由节点和边组成。

树的节点之间存在一对多的关系,顶部的节点称为根节点,没有子节点的节点称为叶节点。

6.二叉树(Binary Tree)二叉树是一种特殊的树结构,每个节点最多只能有两个子节点。

二叉树的子节点称为左子节点和右子节点。

7.图(Graph)图是一种非线性数据结构,它由顶点和边组成。

图可以用来表示各种现实世界中的关系,如社交网络,地图等。

8.哈希表(Hash Table)哈希表是一种根据关键字直接访问数据的数据结构。

它通过将关键字映射到索引上来实现快速访问。

哈希表的查询和插入操作的平均时间复杂度为O(1)。

9.堆(Heap)堆是一种特殊的树结构,它满足堆性质:对于每个节点X,X的父节点的值大于(或小于)其子节点的值。

堆常用于实现优先队列等数据结构。

10.图算法图算法是解决图相关问题的一类算法,包括最短路径算法(如Dijkstra算法、Floyd-Warshall算法)、最小树算法(如Prim算法、Kruskal算法)等。

11.排序算法排序算法是对一组数据进行排序的算法,常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。

数据结构面试题(含答案)

数据结构面试题(含答案)

1。

栈和队列的共同特点是(只允许在端点处插入和删除元素)4。

栈通常采用的两种存储结构是(线性存储结构和链表存储结构)5.下列关于栈的叙述正确的是(D)A.栈是非线性结构B.栈是一种树状结构C.栈具有先进先出的特征D.栈有后进先出的特征6。

链表不具有的特点是(B)A.不必事先估计存储空间B。

可随机访问任一元素C.插入删除不需要移动元素D.所需空间与线性表长度成正比7.用链表表示线性表的优点是(便于插入和删除操作)8.在单链表中,增加头结点的目的是(方便运算的实现)9。

循环链表的主要优点是(从表中任一结点出发都能访问到整个链表)10.线性表L=(a1,a2,a3,……ai,……an),下列说法正确的是(D)A。

每个元素都有一个直接前件和直接后件 B.线性表中至少要有一个元素C。

表中诸元素的排列顺序必须是由小到大或由大到小D。

除第一个和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件11。

线性表若采用链式存储结构时,要求内存中可用存储单元的地址(D)A。

必须是连续的B.部分地址必须是连续的C.一定是不连续的D。

连续不连续都可以12.线性表的顺序存储结构和线性表的链式存储结构分别是(随机存取的存储结构、顺序存取的存储结构)13。

树是结点的集合,它的根结点数目是(有且只有1)14。

在深度为5的满二叉树中,叶子结点的个数为(31)15。

具有3个结点的二叉树有(5种形态)16。

设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为(13)17。

已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是(cedba)18.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为(DGEBHFCA)19.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是(gdbehfca)20。

《数据结构与算法》课后习题答案

《数据结构与算法》课后习题答案

2.3 课后习题解答2.3.2 判断题1.线性表的逻辑顺序与存储顺序总是一致的。

(×)2.顺序存储的线性表可以按序号随机存取。

(√)3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。

(×)4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。

(√)5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。

(×)6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。

(√)7.线性表的链式存储结构优于顺序存储结构。

(×)8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。

(√)9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。

(√)10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。

(×)11.静态链表既有顺序存储的优点,又有动态链表的优点。

所以它存取表中第i个元素的时间与i无关。

(×)12.线性表的特点是每个元素都有一个前驱和一个后继。

(×)2.3.3 算法设计题1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。

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

【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。

int insert (datatype A[],int *elenum,datatype x) /*设elenum为表的最大下标*/ {if (*elenum==arrsize-1) return 0; /*表已满,无法插入*/else {i=*elenum;while (i>=0 && A[i]>x) /*边找位置边移动*/{A[i+1]=A[i];i--;}A[i+1]=x; /*找到的位置是插入位的下一位*/(*elenum)++;return 1; /*插入成功*/}}时间复杂度为O(n)。

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

栈和队列数据结构的特点
栈(Stack)和队列(Queue)都是基本数据结构,具有操作简单、最终效率高等特点,
在实际使用中非常广泛。下面对它们做个简单比较:

1、栈根据先进后出(First In Last Out,FILO)的规则进行操作,即最先入栈的元
素最后才出栈,可以用于数据的存取,后进先出(Last In First Out,LIFO)的特点使
栈可以用来完成单级递减运算;

3、栈和队列都遵循一些通用的原则,比如队列只能有一个主要操作(入队和出队),
而栈只能有一个主要操作(压栈和弹栈);

4、对于存储空间的利用,栈的复杂度是O(n),队列的复杂度是O(1);
总而言之,栈和队列尽管特点不同,但是都是非常实用的数据结构,在不同的应用场
合下都可以充分发挥强大的作用。

相关文档
最新文档