第3章(链表)

合集下载

数据结构第三章习题答案解析

数据结构第三章习题答案解析

第三章习题1.按图3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答:⑴如进站的车厢序列为123,则可能得到的出站车厢序列是什么?⑵如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明原因。

(即写出以“S”表示进栈、以“X”表示出栈的栈操作序列)。

2.设队列中有A、B、C、D、E这5个元素,其中队首元素为A。

如果对这个队列重复执行下列4步操作:(1)输出队首元素;(2)把队首元素值插入到队尾;(3)删除队首元素;(4)再次删除队首元素。

直到队列成为空队列为止,得到输出序列:(1)A、C、E、C、C (2) A、C、E(3) A、C、E、C、C、C (4) A、C、E、C3.给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满?4.按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:A-B*C/D+E↑F5.试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1& 序列2’模式的字符序列。

其中序列1和序列2中都不含字符’&’,且序列2是序列1的逆序列。

例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。

6.假设表达式由单字母变量和双目四则运算算符构成。

试写一个算法,将一个通常书写形式且书写正确的表达式转换为逆波兰式。

7.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法。

8.要求循环队列不损失一个空间全部都能得到利用, 设置一个标志域tag , 以tag为0或1来区分头尾指针相同时的队列状态的空与满,请编写与此结构相应的入队与出队算法。

9.简述以下算法的功能(其中栈和队列的元素类型均为int):(1)void proc_1(Stack S){ int i, n, A[255];n=0;while(!EmptyStack(S)){n++; Pop(&S, &A[n]);}for(i=1; i<=n; i++)Push(&S, A[i]);}(2)void proc_2(Stack S, int e) { Stack T; int d;InitStack(&T);while(!EmptyStack(S)){ Pop(&S, &d);if (d!=e) Push( &T, d);}while(!EmptyStack(T)){ Pop(&T, &d);Push( &S, d);}}(3)void proc_3(Queue *Q){ Stack S; int d;InitStack(&S);while(!EmptyQueue(*Q)){DeleteQueue(Q, &d);Push( &S, d);}while(!EmptyStack(S)){ Pop(&S, &d);EnterQueue(Q,d)}}实习题1.回文判断。

数据结构第三章习题答案解析

数据结构第三章习题答案解析

第三章习题1.按图3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答:⑴如进站的车厢序列为123,则可能得到的出站车厢序列是什么?⑵如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明原因。

(即写出以“S”表示进栈、以“X”表示出栈的栈操作序列)。

2.设队列中有A、B、C、D、E这5个元素,其中队首元素为A。

如果对这个队列重复执行下列4步操作:(1)输出队首元素;(2)把队首元素值插入到队尾;(3)删除队首元素;(4)再次删除队首元素。

直到队列成为空队列为止,得到输出序列:(1)A、C、E、C、C (2) A、C、E(3) A、C、E、C、C、C (4) A、C、E、C3.给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满?4.按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:A-B*C/D+E↑F5.试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1& 序列2’模式的字符序列。

其中序列1和序列2中都不含字符’&’,且序列2是序列1的逆序列。

例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。

6.假设表达式由单字母变量和双目四则运算算符构成。

试写一个算法,将一个通常书写形式且书写正确的表达式转换为逆波兰式。

7.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法。

8.要求循环队列不损失一个空间全部都能得到利用, 设置一个标志域tag , 以tag为0或1来区分头尾指针相同时的队列状态的空与满,请编写与此结构相应的入队与出队算法。

9.简述以下算法的功能(其中栈和队列的元素类型均为int):(1)void proc_1(Stack S){ int i, n, A[255];n=0;while(!EmptyStack(S)){n++; Pop(&S, &A[n]);}for(i=1; i<=n; i++)Push(&S, A[i]);}(2)void proc_2(Stack S, int e){ Stack T; int d;InitStack(&T);while(!EmptyStack(S)){ Pop(&S, &d);if (d!=e) Push( &T, d);}while(!EmptyStack(T)){ Pop(&T, &d);Push( &S, d);}}(3)void proc_3(Queue *Q){ Stack S; int d;InitStack(&S);while(!EmptyQueue(*Q)){DeleteQueue(Q, &d);Push( &S, d);}while(!EmptyStack(S)){ Pop(&S, &d);EnterQueue(Q,d)}}实习题1.回文判断。

数据结构-第3章-队列

数据结构-第3章-队列
下标 队头 0 1 2 3 4 5 队尾 6 7 8 9
a
front
b
c
d
e
f
g
rear
3.2 队列的顺序存储及实现
在使用队列前,先初始化队列,此时,队列为空,队头指针 front和 队尾指针rear都指向队列的第一个位置,即front=rear=0,如图3.3 所示。
下标 0 1 2 3 4 5 6Байду номын сангаас7 8 9
3.3 队列的链式存储及实现
(2)判断队列是否为空。 int QueueEmpty(LinkQueue *Q) {
return Q->rear==Q->front;
}
//头尾指针相等队列为空
3.3 队列的链式存储及实现
(3)将元素x入队。先为新结点申请一个空间,然后将x赋给数据 域,并使原队尾元素结点的指针域指向新结点,队尾指针指向新结点, 从而将结点加入队列中。操作过程如图3.20所示。
3.2 队列的顺序存储及实现
(4)入队
int EnQueue(CirQueue *Q , DataType x)
{ if(QueueFull(Q)) printf(“Queue overflow”); else{ Q->data[Q->rear]=x; Q->rear=(Q->rear+1)%QueueSize; } }
3.3 队列的链式存储及实现
链式队列的类型描述如下:
/*结点类型定义*/
typedef struct QNode { DataType data; struct QNode * next; } QueueNode; /*队列类型定义*/ typedef struct { QueueNode * front; //队头指针

第3章线性表的链式存储

第3章线性表的链式存储
L
(a) 空循环链表
L
a1
a2
...
an
(b) 非空循环链表
3.1.3 双向链表
在单链表结点中只有一个指向其后继结点的next 指针域,而找其前驱则只能从该链表的头指针开始,顺 着各结点的next指针域进行查找,也就是说找后继的时 间复杂度是O(1),找前驱的时间复杂度是O(n)。如果也 希望找前驱像后继那样快,则只能付出空间的代价:每 个结点再加一个指向前驱的指针域prior,结点的结构修 改为下图,这样链表中有两个方向不同的链,用这种结 点组成的链表称为双向链表。
1.带头结点的单链表 2.不带头结点的单链表
3.3.3 单链表插入操作的实现
单链表的插入操作是指在表的第i个位置结点处插入 一个值为data的新结点。插入操作需要从单链表的第一个结 点开始遍历,直到找到第i个位置的结点。插入操作分为在 结点之前插入的前插操作和在结点之后插入的后插操作。
1.前插操作 2.后插操作
2.整数型单链表算法
3.不带头结点的单链表算法
3.2.2 尾插法单链表的创建实现
用头插法实现单链表的创建,比较简单,但读入的 数据元素的顺序与生成的链表中元素的顺序是相反的。若希 望两者次序一致,则用尾插法创建单链表。为了快速找到新 结点插入到链表的尾部位置,所以需加入一个尾指针r用来 始终指向链表中的尾结点。初始状态:头指针L和尾指针r均 为空,把各数据元素按顺序依次读入,申请结点,将新结点 插入到r所指结点的后面,然后r指向新结点,直到读入结束 标志为止。
3.2.2 尾插法单链表的创建实现
L
插入P前的尾指针 插入P后的尾指针
r
3
4
P1
x^
2
3.3 单链表运算的实现

嵌入式操作系统_第3章 任务结构、状态、优先级、代码结构、任务控制块及链表、任务堆栈

嵌入式操作系统_第3章 任务结构、状态、优先级、代码结构、任务控制块及链表、任务堆栈
II就是一个能对这些小任务的运 行进行管理和调度的多任务操作 系统。
从应用程序设计的
角度来看, μC/OS-II的任务就 是一个用户编写的 C函数和与之相关 联的一些数据结构
内存
在内存中应该 存有任务的代 码和与该任务 配套的堆栈
任务代码 任务堆栈
而构成的一个实体。
进程的状态
运行态 就绪态 等待态(阻塞态)
程序通过访问它来了解CPU的利用率, 所以这个系统任务OSTaskStat( )叫做 统计任务
任务及的优优先先级权别 用O常明常使O个固O应把计别OSSSS户_数应数用_定_用优任是_CLLL可F用一的OO地O程先务:OGWSWW权 一 表 优 则 低以.程旦优E_μ,E序级,E0HSLCSS,个先表分 示根序被先T中O系T中别因T/_W__1O级级示为 。据中定级P通E统P还此PO,SRSRRS别别任应任义I过T数6_总I使用I2_O_4IOO…L用务,为给P,I务都最字个是用户自-ORO1W把程优则:表I共把了任动S个E的用高优0O_S表任序先意示赋0O最统务赋LT优一,先S,O_示务的级味最_值低计可给WP先个数级L1ER需别着低O,的任的优任以空SIW级数字别TO要的系优E2方务优先务使闲_-S,别字P1越,,数 统先T法级, 用任R自的先_…I越来大每在目中级P,别系的务O动R…-文。可别I来统优。2赋O,,件该供的+说则先如给1共会级果统
任当务控应制用块结程构序的主调要用成员函数OSTaskCreate( )
任务及控任制务块控(O制S_块TC链B)表 t…y创统进任务控这表…pOssIII数具链的表…etNNtNdrr…S建函行务控制个的TTTuue任_会有接任。fcc188Stts任 任 制 认务6UUT一数初从制块任头μ栈务理控tooUr当由按相为务即Kuss控__c个始空块各务部O务务块和ttt制C的*指有制cc进于用应一,相oSObbOOOs/块任化任,个控T_S**SSS控的的管行这户数个故当t针关优OT块OOC链TTTcbC务。务然成制BCCSCSS表系 些提量链这于BTT{BBBI制 身 任理、的先-SCCDPS时这控后员块ntItBBr统任供的表个是lkiayi块 份 务的PNPot任 属级I;,个制用进链t;;rte初务的任。链一re用x///;vt///就 证 是这函块任行入(任任任/;;务 性别//始控任务表些指///指务务务来指个数链务赋到)向相 , 不的 的化制等向务控叫空等的的向来任记函首表的值任后待当优前时块数制做白当 没 能务为当 表一一的前先一空数先获属,务堆录,还个为块空的时状级个任任于 有 被栈前 就些会为取性最控任限态别任务初没系并任身任栈务务标(务是 任 系控状 叫与调 被 一对 后 制顶始有控统把务 份志节控控制务的用创个任再块制拍一务统制态做任块化对创它块证指制块数块的链系建任务把链针个控承函应的建们链。)、任务的块表指堆指任管务针针

数据结构与算法第3章课后答案

数据结构与算法第3章课后答案

第 3 章特殊线性表——栈、队列和串(2005-07-14) -第 3 章特殊线性表——栈、队列和串课后习题讲解1. 填空⑴设有一个空栈,栈顶指针为1000H,现有输入序列为1、2、3、4、5,经过push,push,pop,push,pop,push,push后,输出序列是(),栈顶指针为()。

【解答】23,1003H⑵栈通常采用的两种存储结构是();其判定栈空的条件分别是(),判定栈满的条件分别是()。

【解答】顺序存储结构和链接存储结构(或顺序栈和链栈),栈顶指针top= -1和top=NULL,栈顶指针top等于数组的长度和内存无可用空间⑶()可作为实现递归函数调用的一种数据结构。

【解答】栈【分析】递归函数的调用和返回正好符合后进先出性。

⑷表达式a*(b+c)-d的后缀表达式是()。

【解答】abc+*d-【分析】将中缀表达式变为后缀表达式有一个技巧:将操作数依次写下来,再将算符插在它的两个操作数的后面。

⑸栈和队列是两种特殊的线性表,栈的操作特性是(),队列的操作特性是(),栈和队列的主要区别在于()。

【解答】后进先出,先进先出,对插入和删除操作限定的位置不同⑹循环队列的引入是为了克服()。

【解答】假溢出⑺数组Q[n]用来表示一个循环队列,front为队头元素的前一个位置,rear为队尾元素的位置,计算队列中元素个数的公式为()。

page: 2The Home of jetmambo - 第 3 章特殊线性表——栈、队列和串【解答】(rear-front+n)% n【分析】也可以是(rear-front)% n,但rear-front的结果可能是负整数,而对一个负整数求模,其结果在不同的编译器环境下可能会有所不同。

⑻用循环链表表示的队列长度为n,若只设头指针,则出队和入队的时间复杂度分别是()和()。

【解答】O(1),O(n)【分析】在带头指针的循环链表中,出队即是删除开始结点,这只需修改相应指针;入队即是在终端结点的后面插入一个结点,这需要从头指针开始查找终端结点的地址。

第三章 链表 基本题

第三章 链表 基本题
如果采用链接存储表示,一个表的存储空间可以连续,可以不连续。表的增长通过动态存储分配解决,只要存储器未满,就不会有表溢出的问题;表的收缩可以通过动态存储释放实现,释放的空间还可以在以后动态分配给其他的存储申请要求,非常灵活方便。对于n个表(包括表的总数可能变化)共存的情形,处理十分简便和快捷。所以选用链接存储表示较好。时间复杂
A.O(1) B.O(n) C.O(n2) D.O(n㏒2n)
11.在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是
A.O(1) B.O(n) C.O(n2) D.O(n㏒2n)
12.向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行
13.(1)O(1) (2)O(n)
3.3习题解析
1. 线性表可用顺序表或链表存储。试问:
(1) 两种存储表示各有哪些主要优缺点?
(2) 如果有n个表同时并存,并且在处理过程中各表的长度会动态发生变化,表的总数也可能自动改变、在此情况下,应选用哪种存储表示?为什么?
(3) 若表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元素,这时,应采用哪种存储表示?为什么?
7.在一个单链表中,若删除p所指结点的后续结点,则执行
A.p->next=p->next->next;
B.p=p->next; p->next=p->next->next;
C.p->next=p->next
D.p=p->next->next
8.假设双链表结点的类型如下:
typedef struct linknode
(3) 应采用顺序存储表示。因为顺序存储表示的存取速度快,但修改效率低。若表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元素,这时采用顺序存储表示较好。

第3章数据结构基本类型3.1线性表-高中教学同步《信息技术-数据与数据结构》(教案)

第3章数据结构基本类型3.1线性表-高中教学同步《信息技术-数据与数据结构》(教案)
学生预习:
布置预习任务,要求学生提前阅读线性表的基础知识和概念。
发放预习材料,如PPT、视频教程或预习习题。
课堂讨论引导:
准备引导性问题,鼓励学生积极参与课堂讨论。
设计小组活动,促进学生之间的合作与交流。
课后反馈:
设计课后习题和作业,以检验学生的学习效果。
准备课后答疑和辅导,为学生提供必要的帮助和支持。
确保教学环境中网络连接稳定,以便在需要时展示在线资源或示例。
教学媒体
教学媒体
PPT演示文稿:
线性表的基本概念、定义、特点和示例的幻灯片。
顺序存储和链式存储的对比图示。
线性表基本操作(如初始化、查找、插入、删除)的动画或图解。
代码编辑器/IDE:
演示顺序表和链表的实现代码(如Python)。
允许学生直接看到、理解和操作代码。
情感、态度与价值观:
激发学生的学习兴趣和创造力,培养学生的探索精神和创新精神。
引导学生认识到数据结构在解决实际问题中的重要性,形成合理的计算机思维观念。
学习重难点
教学重点
线性表的基本概念:理解线性表是什么,它如何表示具有相同பைடு நூலகம்型数据元素的有限序列,并理解其特点,包括唯一的首尾元素以及除首尾外每个元素有且仅有一个前驱和后继。
准备用于课堂讨论的实例和问题,如通信录的设计和实现。
准备教学用计算机和相关编程环境(如Python环境),以便现场演示代码和执行结果。
教学流程设计:
设计教学流程,从线性表的基础概念引入,逐步深入到线性表的存储方式和操作。
设计课堂互动环节,如提问、小组讨论等,鼓励学生积极参与和表达。
安排编程实践环节,让学生亲自编写线性表相关操作的代码,加深理解。
线性表的应用场景:通过通信录的实例,了解线性表在实际问题中的应用,并理解如何根据需求选择合适的数据结构和存储方式。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三. 删除(退栈)算法
top
item
p
......
^
算法
void PopStack(Stack &top) { if (top==Null) error(“栈空”); { p=top; top=top->next; delete(p); } }
队列的链式存储结构
一. 构造原理
队列的链式存储结构是用一个线性链表表示 一个队列. front 指向实际队头 rear 指向实际队尾元素所在的链结点 建立不带头结点的链队
2)Length (Head):返回单链表中所含表结点的个数。 int Length(Pointer head) { p=Head;j=0; while (p->next!=NULL) //继续计数 {j++; p=p->next;} return(j);//回传表长 } 3)Find (Head,i):返回指向单链表第i个结点的指针。 Pointer Find(Pointer head, int i) { p = head; j =0; while (((p->next)!=NULL )&& (j< i) ) { p = p->next; j++;} if (i= =j) return(p); else return(NULL); }
练习1
若已知非空线性链表第一个结点的指针为list, 请 写一个算法, 将该链表中数据域值最小的那个 结点移到链表的最前端。
lis t
35 67 18

52
10
14
71

82
65
q
p
^
lis t
35 67 18

52
10
14
71

82
65
s
q
^
void Remove( linklist &list )//不带头结点的链表 算法 { q=list; p=list->next; r=list; while (p!=null) { if (p->data <q->data) { s=r; //s总是指向q的前一个结点 q=p; } r=p; //r总是指向p的前一个结点 p=p->next; } // 找到值最小的那个结点 ,地址由q记录 if (q!=list) // 若值最小的结点不是链表最前面那个结点 // { s->next=q->next; q->next=list; list=q; } }
例2:一元多项式的表示及相加。 在数学上,一个一元n次多项式Pn(X)可按升幂写成: Pn(x)=P1xe1+P2xe2+…+Pmxem 其中, Pi是指数为ei的项的非零系数,且满足 0≤e1<e2<…<em 若用一个长度为m且每个元素有两个数据项(系数项和指 数项)的线性表 ((p1,e1),(p2,e2),…,(pm,em))便可唯 一确定多项式Pn(x)。
7) CreateList (Head):建立一个单链表。(尾插法建立单链表
void CreateList (Pointer &head ) { head = new Node; //生成头结点 p=head; //尾指针指向头结点 getchar(x); while (x!=‟*‟) { q = new Node; if (!q) exit(1); // 存储空间分配失败 q->data=x; p->next=q; p=q; getchar(x); } p->next=NULL; }
void Create_Link_2(Pointer &head )//头插法建单链表。 { p=Null; //先置尾节点 getchar(x) ; while (x< > „*‟ ) Do { q=new node; q ->data=x; q ->next=p; p=q; getchar(x) ;} head=new node; Head ->next=p; //置头节点 }
三、线性表的链式存储结构的优缺点:
优点:1)存储空间动态分配,可以按需要使用; 2)插入/删除结点操作时,只需要修改指针, 不必移动数据元素
缺点:1)每个结点序加一指针域,存储密度降低; 2)不能随机存取,查找定位操作需要从 头指针出发顺着链表扫描
四、单链表的应用示例: 例1.将一个单链表逆置
void Invert_Link_1(Pointer &Head) //不带头结点 { p=Head;Head=Null; while (p != Null) { q=p->next; p->next=Head;Head=p;p=q} } void Invert_Link_2(Pointer &Head) //带头结点 { p=Head->next;h=Null; while (p != NULL) {q=p->next; p->next=h;h=p;p=q} head->next=h; }
第三章 链 表
★ 线性链表 ★ 链栈、链队 ★ 循环链表 ★ 多重链表
2.1 线性链表
假定上图为当前内存的使用情况,阴影部分为已用内存 现有一线性表L=(A,B,C,D,E,F,G,H),假若采用顺序存储 的话,则在当前内存中不能分配一块长度为8的连续的存 储空间。但实际上,系统的可用内存远大于该线性表所 要求的内存空间,应采用其它的存储结构—链式存储。
的数据域不存放信息、或存放如线性的长度等附加信息。 首元结点:单链表中存放第一个元素的结点。 表结点:存放线性表中所有数据元素的结点。
单链表中设臵头结点的好处:
1)其头指针是指向头结点的非空指针,无论链表是否为 空,头指针始终保持值不变,因此头指针的处理方法 对空表和非空表的操作是一致的,这与不带头结点的 单链表为空时头指针为空不同。 2)首元结点的地址存放在头结点的指针域中,对该结点 的操作与其它结点的操作一致,无需进行特殊处理(如 删除首元结点时,对不带头结点的单链表要修改头指 针)。
5)Insert (Head,x,i):在单链表的第i个结点之前插入值 等于x的结点。 p
x=„F‟ i=3 Head A B ②
void Insert (Pointer &head, int i, ElemType x ) S { // 在表head的第i个结点之前插入一个以x为值的新结点 p=Find(head,i-1); if(!p) error(“without”); else { s=new Node; if (!s) exit(1); // 存储空间分配失败 s->data=x; // 创建新元素的结点 s->next=p-> next; p->next=s; // 修改指针} }
二、单链表上基本运算的实现
单链表的类型定义如下(C语言) typedef struct Node { ElemType data; struct Node *next; } *Pointer;
head nil
1)Initial(Head):初始化一个单链表 带头结点的空表 void Initial( Pointer &head) { head = new Node; if (!head) exit(1); // 存储空间分配失败 head->next = NULL; }
可以采用链式存储结构来表示线性表: typedef struct Node
{ double coef;
int exp; struct Node *next;
算法描述如下: void Polyadd(polynom &pa,&pb,&pc) //pa,pb和pc分别为表示多项式A和B及它们的和C的带表头的单链表的头指针 { p=pa->next; q=pb->next; s=pa; pc=pa; //s指向p的直接前驱 while((p!=NULL)&&(q!=NULL)) { if(p->exp>q->exp) { s=p; p=p->next;} //p指针后移 if(p->exp==q->exp) { x=p->coef+q->coef; if(x!=0) { p->coef=x; s=p} //修改p结点 else { s->next=p->next; delete(p); } //删除p结点 p=s->next; u=q; q=q->next; delete(u);} if(p->exp<q->exp) { u=q->next; q->next=p;s->next=q; s=q;q=u;} //q结点插入在p结点之前,q指针后移 } if(q!=NULL) s->next=q; delete(pb); }
4)Locate (Head,x):在单链表中查找值等于x的结点, 返回该结点的序号。
x=„C‟ Head A B C D ^
int Locate(Pointer head, ElemType x) p { p=head;j=0; while ( ((p->next)!=NULL) && (p->data!=x) ) { p=p->next; j++; } if (p->data==x) return(j); else return(0); }
约 定:
rear 指出实际队尾元素所在的位臵. front 指出实际队头元素所在位臵的前一个位臵. 建立的是带头结点的链队
在一个初始为空的链接队列中依次插入数据元素 A, B, C, D 以后, 队列的状态为
相关文档
最新文档