数据结构练习题解答(三)第三章链表

合集下载

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

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

第三章习题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.栈、栈顶、栈底、栈顶元素、空栈2.顺序栈3.链栈4.递归5.队列、队尾、队头6.顺序队7.循环队8.队满9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵二、填空题:1.栈修改的原则是_________或称________,因此,栈又称为________线性表。

在栈顶进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________或________。

2.栈的基本运算至少应包括________、________、________、________、________五种。

3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。

4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。

5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。

6.top=0表示________,此时作退栈运算,则产生“________”;top=sqstack_maxsize-1表示________,此时作进栈运算,则产生“________”。

7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。

int InitStack(SqStackTp *sq){ ________;return(1);}8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。

Int Push(SqStackTp *sq,DataType x){ if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);}else{________________:________________=x;return(1);}}9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。

数据结构二期练习题解答

数据结构二期练习题解答

数据结构第二期练习题解答第三章链表3-2试编写一个算法,在带表头结点的单链表中寻找第i个结点。

若找到,则函数返回第i个结点的地址;若找不到,则函数返回0。

【解答】template <class Type>ListNode <Type> * List <Type> ::GetANode ( int i > {//取得单链表中第i个结点地址,i从0开始计数, i < 0时返回指针0, i = 0时返回表头结点地址。

if ( i < 1 > return NULL。

ListNode <Type> * p = first。

int k = 0。

while ( p != NULL&&k < i > {p = p→link。

k++。

}return p。

}3-3 设ha和hb分别是两个带表头结点的非递减有序单链表的表头指针, 试设计一个算法, 将这两个有序链表合并成一个非递增有序的单链表。

要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间。

表中允许有重复的数据。

【解答】#include <iostream.h>template <class Type> class List。

template <class Type> class ListNode{friend class List<Type>。

public:ListNode(>。

//构造函数ListNode(const Type&item>。

//构造函数private:Type data。

ListNode<Type> *link。

}。

template <class Type> class List{public:List(const Type finishied >。

数据结构第三章考试题库(含答案)

数据结构第三章考试题库(含答案)

第3章栈和队列一选择题1. 对于栈操作数据的原则是()。

【青岛大学2001 五、2(2分)】A. 先进先出B. 后进先出C. 后进后出D. 不分顺序2. 在作进栈运算时,应先判别栈是否( ①),在作退栈运算时应先判别栈是否( ②)。

当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为( ③)。

为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的( ④)分别设在这片内存空间的两端,这样,当( ⑤)时,才产生上溢。

①, ②: A. 空 B. 满 C. 上溢 D. 下溢③: A. n-1 B. n C. n+1 D. n/2④: A. 长度 B. 深度 C. 栈顶 D. 栈底⑤: A. 两个栈的栈顶同时到达栈空间的中心点.B. 其中一个栈的栈顶到达栈空间的中心点.C. 两个栈的栈顶在栈空间的某一位置相遇.D. 两个栈均不空,且一个栈的栈顶到达另一个栈的栈底.【上海海运学院1997 二、1(5分)】【上海海运学院1999 二、1(5分)】3. 一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是()。

A. 不确定B. n-i+1C. iD. n-i【中山大学1999 一、9(1分)】4. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是()。

A. i-j-1B. i-jC. j-i+1D. 不确定的【武汉大学2000 二、3】5. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,p N,若p N是n,则p i是( )。

A. iB. n-iC. n-i+1D. 不确定【南京理工大学2001 一、1(1.5分)】6. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?()A. 5 4 3 6 1 2B. 4 5 3 1 2 6C. 3 4 6 5 2 1D. 2 34 15 6【北方交通大学2001 一、3(2分)】7. 设栈的输入序列是1,2,3,4,则()不可能是其出栈序列。

数据结构(C语言版)第三章习题解答

数据结构(C语言版)第三章习题解答

第三章习题解答1.分别写出对链栈的入栈和出栈操作的算法。

链栈的结点类型定义如下:Typedef struct stacknode {SElemtype data;struct stacknode *next;}stacknode, *linkstack;入栈操作:Status push( linkstack &S, SElemtype e){ p=(linkstack)malloc(sizeof(stacknode));If (!p) return ERROR;p->data=e;p->next=S;S=p;return OK;}出栈操作:Status pop(linkstack &S, SElemtype &e){ if (!S) return ERROR;p=s;s=p->next;free(p);return OK;}P24/3.15假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。

试编写实现这个双向栈tws的三个操作:初始化inistack(tws),入栈push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈,并讨论按过程(正/误状态变量可设为变参)或函数设计这些操作算法各有什么优缺点。

双栈的结构类型定义如下:typedef struct{Elemtype *base[2];Elemtype *top[2];}BDStacktype; //双向栈类型栈的初始化操作:status Init_Stack(BDStacktype &tws,int m)//初始化一个大小为m的双向栈tws{ tws.base[0]=(Elemtype*)malloc(m*sizeof(Elemtype));tws.base[1]=tws.base[0]+m-1;tws.top[0]=tws.base[0];tws.top[1]=tws.base[1];return OK;}入栈操作:Status push(BDStacktype &tws,int i,Elemtype x) // x入栈,i=0表示低端栈,i=1表示高端栈{ if (tws.top[0]>tws.top[1]) return OVERFLOW;//注意此时的栈满条件if (i==0) *tws.top[0]++=x;elseif (i==1) *tws.top[1]--=x;else return ERROR;return OK;}出栈操作:Status pop(BDStacktype &tws, int i, Elemtype &x) // x出栈,i=0表示低端栈,i=1表示高端栈{ if (i==0){ if (tws.top[0]==tws.base[0]) return OVERFLOW;x=*--tws.top[0];}else if (i==1){ if (tws.top[1]==tws.base[1]) return OVERFLOW;x=*++tws.top[1];}else return ERROR;return OK;}P24/3.18试写一个判别表达式中开、闭括号是否配对出现的算法。

数据结构课后习题答案第三章

数据结构课后习题答案第三章

第三章栈和队列(参考答案)// 从数据结构角度看,栈和队列是操作受限的线性结构,其顺序存储结构// 和链式存储结构的定义与线性表相同,请参考教材,这里不再重复。

3.1 1 2 3 4 2 1 3 4 3 2 1 4 4 3 2 11 2 4 3 2 1 4 3 3 2 4 11 32 4 23 14 3 4 2 11 3 42 234 11 4 32 2 43 1设入栈序列元素数为n,则可能的出栈序列数为C2n n=(1/n+1)*(2n!/(n!)2)3.2 证明:由j<k和p j<p k说明p j在p k之前出栈,即在k未进栈之前p j已出栈,之后k进栈,然后p k出栈;由j<k和p j>p k说明p j在p k之后出栈,即p j被p k压在下面,后进先出。

由以上两条,不可能存在i<j<k使p j<p k<p i。

也就是说,若有1,2,3顺序入栈,不可能有3,1,2的出栈序列。

3.3 void sympthy(linklist *head, stack *s)//判断长为n的字符串是否中心对称{ int i=1; linklist *p=head->next;while (i<=n/2) // 前一半字符进栈{ push(s,p->data); p=p->next; }if (n % 2 !==0) p=p->next;// 奇数个结点时跳过中心结点while (p && p->data==pop(s)) p=p->next;if (p==null) printf(“链表中心对称”);else printf(“链表不是中心对称”);} // 算法结束3.4int match()//从键盘读入算术表达式,本算法判断圆括号是否正确配对(init s;//初始化栈sscanf(“%c”,&ch);while (ch!=’#’) //’#’是表达式输入结束符号switch (ch){ case ’(’: push(s,ch); break;case ’)’: if (empty(s)) {printf(“括号不配对”); exit(0);}pop(s);}if (!empty(s)) printf(“括号不配对”);else printf(“括号配对”);} // 算法结束3.5typedef struct // 两栈共享一向量空间{ ElemType v[m]; // 栈可用空间0—m-1int top[2] // 栈顶指针}twostack;int push(twostack *s,int i, ElemType x)// 两栈共享向量空间,i是0或1,表示两个栈,x是进栈元素,// 本算法是入栈操作{ if (abs(s->top[0] - s->top[1])==1) return(0);// 栈满else {switch (i){case 0: s->v[++(s->top)]=x; break;case 1: s->v[--(s->top)]=x; break;default: printf(“栈编号输入错误”); return(0);}return(1); // 入栈成功}} // 算法结束ElemType pop(twostack *s,int i)// 两栈共享向量空间,i是0或1,表示两个栈,本算法是退栈操作{ ElemType x;if (i!=0 && i!=1) return(0);// 栈编号错误else {switch (i){case 0: if(s->top[0]==-1) return(0);//栈空else x=s->v[s->top--];break;case 1: if(s->top[1]==m) return(0);//栈空else x=s->v[s->top++]; break;default: printf(“栈编号输入错误”);return(0);}return(x); // 退栈成功}} // 算法结束ElemType top (twostack *s,int i)// 两栈共享向量空间,i是0或1,表示两个栈,本算法是取栈顶元素操作{ ElemType x;switch (i){case 0: if(s->top[0]==-1) return(0);//栈空else x=s->v[s->top]; break;case 1: if(s->top[1]==m) return(0);//栈空else x=s->v[s->top]; break;default: printf(“栈编号输入错误”);return(0);}return(x); // 取栈顶元素成功} // 算法结束3.6void Ackerman(int m,int n)// Ackerman 函数的递归算法{ if (m==0) return(n+1);else if (m!=0 && n==0) return(Ackerman(m-1,1);else return(Ackerman(m-1,Ackerman(m,n-1))} // 算法结束3.7(1) linklist *init(linklist *q)// q是以带头结点的循环链表表示的队列的尾指针,本算法将队列置空{ q=(linklist *)malloc(sizeof(linklist));//申请空间,不判断空间溢出q->next=q;return (q);} // 算法结束(2) linklist *enqueue(linklist *q,ElemType x)// q是以带头结点的循环链表表示的队列的尾指针,本算法将元素x入队{ s=(linklist *)malloc(sizeof(linklist));//申请空间,不判断空间溢出s->next=q->next; // 将元素结点s入队列q->next=s;q=s; // 修改队尾指针return (q);} // 算法结束(3) linklist *delqueue(linklist *q)//q是以带头结点的循环链表表示的队列的尾指针,这是出队算法{ if (q==q->next) return (null); // 判断队列是否为空else {linklist *s=q->next->next; // s指向出队元素if (s==q) q=q->next; // 若队列中只一个元素,置空队列else q->next->next=s->next;// 修改队头元素指针free (s); // 释放出队结点}return (q);} // 算法结束。

数据结构习题答案第3章

数据结构习题答案第3章

选择题第3章线性表的链式存储(1)两个有序线性表分别具有n个元素与m个元素且n≤m,现将其归并成一个有序表,其最少的比较次数是( A )。

A.n B.m C.n− 1D.m + n(2)非空的循环单链表 head 的尾结点(由 p 所指向)满足( C )。

A.p->next==NULL B.p==NULL C.p->next==head D.p==head(3)在带头结点的单链表中查找x应选择的程序体是( C )。

A.node *p=head->next; while (p && p->info!=x) p=p->next;if (p->info==x) return p else return NULL;B.node *p=head; while (p&& p->info!=x) p=p->next; return p;C.node *p=head->next; while (p&&p->info!=x) p=p->next; return p;D.node *p=head; while (p->info!=x) p=p->next ; return p;(4)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( D )。

A.必须是连续的C.一定是不连续的B.部分地址必须是连续的D.连续不连续都可以(5)在一个具有n个结点的有序单链表中插入一个新结点并保持单链表仍然有序的时间复杂度是( B )。

A.O(1) B.O(n)C.O(n2)D.O(n log2n)(6)用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时(D )。

A.仅修改队头指针C.队头、队尾指针都要修改B.仅修改队尾指针D.队头,队尾指针都可能要修改(7)若从键盘输入n个元素,则建立一个有序单向链表的时间复杂度为( B )。

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

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

数据结构第三章习题答案解析第三章习题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. 按照四则运算加、减、乘、除和幕运算(T)优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:A —B *C/D+EfF5. 试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1 & 序列2' 模式的字符序列。

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

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

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

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

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

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

数据结构第三章参考答案

数据结构第三章参考答案

习题31.填空题(1)栈的进出原则是(___________),队列的进出原则是(___________)。

答案:后进先出(LIFO)先进先出(FIFO)(2)设32位计算机系统中,空栈S存储int型数据,栈顶指针为1024H。

经过操作序列push(1),push(2),pop,push(5),push(7),pop,push(6)之后,栈顶元素为(___________),栈底元素为(___________),栈的高度为(___________),输出序列是(___________),栈顶指针为(___________)H。

答案:6 1 3 2,7 1030(3)两栈共享存储空间,其数组大小为100,数组下标从0开始。

top1和top2分别为栈1和栈2的栈顶元素下标,则栈1为空的条件为(___________),栈2为空的条件为(___________),栈1或栈2满的条件为(___________)。

答案:top1==-1 top2==100 top1+1==top2(4)一个队列的入队顺序是1234,则队列的输出顺序是(___________)。

答案:1234(5)设循环队列数组大小为100,队头指针为front,队尾指针为rear;约定front指向队头元素的前一个位置,该位置永远不存放数据。

则入队操作时,修改rear=(___________),出队操作修改front=(___________),队空的判别条件为(___________),队满的判别条件为(___________)。

若front=20,rear=60,则队列长度为(___________),若front=60,rear=20,则队列长度为(___________)。

答案:(rear+1)%100 (front+1)%100 rear==front (rear+1)%100=front 40 60(6)朴素模式匹配算法中,每个串的起始下标均为1,变量i=100,j=10,分别表示主串和模式串当前比较的字符元素下标,若本次比较两字符不同,则i回溯为(___________),j 回溯为(___________)。

数据结构课后习题第三章

数据结构课后习题第三章

1.对于栈,操作数据的原则是()。

A.先进先出B.后进先出C.后进后出D.不分顺序2. 一般情况下,将递归算法转换成非递归应通过设置()实现。

A.数组B.线性表C.队列D.栈3. 栈和队列的共同点是()。

A.都是先进后出B.都是先进先出C.只允许在端点处插入和删除元素D.没有共同点4. 若元素a,b,c,d,e,f依次进栈,允许进栈、退栈操作交替进行,但不允许连续3次进行退栈操作,则不可能得到的顺序是()。

A.dcebfaB.cbdaefC.bcaefdD.afedcb5.某队列允许在两端进行入队操作,但仅允许在一端进行出队操作,若入队顺序为abcde,则不可能得到的顺序是()。

A.bcadeB.dbaceC.dbcaeD.ecbad6.在对栈的操作中,能改变栈的结构是()。

A.StackLength(S)B.StackEmpty(S)C. GetTop(S)D.ClearStack(S)7.在一个栈顶指针为HS的链栈中将一个S指针所指的结点入栈,应执行()。

A.HS->next=s;B.S->next=HS->next;HS->next=s;C.S->next=HS;HS=s;D.S->next=HS;HS=HS->next;8.若已知一个栈的入栈序列是1,2,3,…n,其输出序列是p1,p2,p3,…pn,若p1=n,则pi=()。

A.iB.n-IC.n-i+1D.不确定9.若用一个大小为6的数组来实现循环队列,且当前尾指针rear和头指针front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,尾指针rear和头指针front的值分别是()。

A.1和5B.2和4C.4和2D.5和110.要使输入序列为ABC变为序列BAC,使用的栈操作序列为()A.push,pop,push,pop,push,popB.push,push,push,pop,pop,popC.push,push,pop,pop,push,popD.push,pop,push,push,pop,pop11.设用一个大小为m=60的顺序表A[m]表示一个循环队列,如果当前的尾指针rear=32,头指针front=15,则当前循环队列的元素个数是()A.42B.16C. 17D.4112.设用顺序表a[n]表示循环队列,头,尾指针分别为front和rear,则判断队列为空的条件是(),判断队列满的条件是()(1)A.a.front+1==a.rear B.a.front==a.rear+1C.a.front==0D.a.front==a.rear(2)A.(a.rear-1)%n=a.front B(a.rear+1)%n=a.frontC.a.rear=(a.front-1)%n Da.rear=(a.front+1)%n13.设循环队列存储在数组A[0..m]中,则入队时的操作为()A.rear=rear+1B.rear=(rear+1)mod(m-1)C,.rear=(rear+1)mod m D.rear=(rear+1)mod(m+1)14在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则从该缓冲区中取出数据打印,该缓冲区应该是一个()结构A 栈B队列C数组D线性表15.设栈用向量V[1.…n]存储,初始栈顶指针top为n+1,则下面将x进栈的正确操作是()A V[++top]=xB V[top++]=xC V[--top]=xD V[top--]=x16.若栈采用顺序存储方式存储,现在俩个共享空间V[1……m],top[i]代表第i个栈(i=1,2)的栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()A|top[2]-top[1]|=0 B top[1]+1=top[2]C top[1]+top[2]=mD t op[1]=top[2]17.表达式a*(b+c)-d的后缀表达式是()A. abcd*+ - B abc+*d-C abc*+d- D-+*abcd18一个栈的输入序列为123……n若输出序列的第一个元素是n,则输出第i(1<=i<=n)个元素是()A 不确定Bn-i+1 C i D n-i二题1.在栈中,可进行插入和删除操作的一端称为()。

《数据结构》第3章自测卷(+答案)

《数据结构》第3章自测卷(+答案)

第3章栈和队列一、填空题1. 线性表、栈和队列都是线性结构,可以在向量的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入和队头删除元素。

2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。

不允许插入和删除运算的一端称为栈底。

3. 队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。

4. 在一个循环队列中,队首指针指向队首元素的前一个位置。

5. 在具有n个单元的循环队列中,队满时共有n-1个元素。

6. 向栈中压入元素的操作是先移动栈顶指针,后存储元素。

7. 从循环队列中删除一个元素时,其操作是先移动队首指针,后取出元素。

8. 带表头结点的空循环双向链表的长度等于0 。

二、判断正误(×)1. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。

(×)2. 在表结构中最常用的是线性表,栈和队列不太常用。

(√)3. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。

(√)4. 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。

(×)5. 栈和链表是两种不同的数据结构。

(×)6. 栈和队列是一种非线性数据结构。

(√)7. 栈和队列的存储方式既可是顺序方式,也可是链接方式。

(√)8. 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。

(×)9. 队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。

(×)10. 一个栈的输入序列是12345,则栈的输出序列不可能是12345。

三、单项选择题( B )1. 栈中元素的进出原则是A.先进先出B.后进先出C.栈空则进D.栈满则出(C)2. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为A.i B.n=i C.n-i+1 D.不确定(B)3. 判定一个栈ST(最多元素为m0)为空的条件是A.ST->top<>0 B.ST->top=0 C.ST->top<>m0 D.ST->top=m0(A)4. 判定一个队列QU(最多元素为m0)为满队列的条件是A.QU->rear -QU->front = = m0 B.QU->rear -QU->front -1= = m0C.QU->front = = QU->rear D.QU->front = = QU->rear+1( D )5.数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为(A)r-f; (B)(n+f-r)% n; (C)n+r-f; (D)(n+r-f)% n6. 设有4个数据元素a1、a2、a3和a4,对他们分别进行栈操作或队操作。

(完整版)第三章单链表题目和答案

(完整版)第三章单链表题目和答案

第2 章自测卷答案一、填空1.次序表中逻辑上相邻的元素的物理地点互相相邻。

单链表中逻辑上相邻的元素的物理地点不相邻。

2.在单链表中,除了首元结点外,任一结点的储存地点由其直接前驱结点值域指示。

3.在 n 个结点的单链表中要删除已知结点*p ,需找到它的地点。

二、判断正误(在正确的说法后边打勾,反之打叉)1.链表的每个结点中都恰巧包括一个指针。

X2.链表的物理储存构造拥有同链表同样的次序。

X3.链表的删除算法很简单,由于当删除链中某个结点后,计算时机自动地将后续的各个单元向前挪动。

X4.线性表的每个结点只好是一个简单种类,而链表的每个结点能够是一个复杂种类。

Y5.次序表构造适合于进行次序存取,而链表适合于进行随机存取。

Y6.次序储存方式的长处是储存密度大,且插入、删除运算效率高。

X7.线性表在物理储存空间中也必定是连续的。

X8.线性表在次序储存时,逻辑上相邻的元素未必在储存的物理地点序次上相邻。

X9.次序储存方式只好用于储存线性构造。

X10.线性表的逻辑次序与储存次序老是一致的。

X三、单项选择题( A )1. 链接储存的储存构造所占储存空间:(A )分两部分,一部分寄存结点值,另一部分寄存表示结点间关系的指针(B)只有一部分,寄存结点值(C)只有一部分,储存表示结点间关系的指针(D)分两部分,一部分寄存结点值,另一部分寄存结点所占单元数( B ) 2. 链表是一种采纳储存构造储存的线性表;( A )次序(B)链式(C)星式(D)网状( D) 3.线性表若采纳链式储存构造时,要求内存中可用储存单元的地点:( A )一定是连续的(B)部分地点一定是连续的( C)必定是不连续的(D)连续或不连续都能够( B)4.线性表L在状况下合用于使用链式构造实现。

(A)需常常改正L中的结点值(B)需不停对L进行删除插入(C)L中含有大批的结点(D)L中结点构造复杂( C) 5.单链表的储存密度(A)大于1;(B)等于1;(C)小于1;(D)不可以确立A 、 1B、 2C、 3D、 4( D ) 7、设一个链表最常用的操作是在末端插入结点和删除尾结点,则采纳最节俭时间。

数据结构第3章习题答案共7页word资料

数据结构第3章习题答案共7页word资料

head 11级计本、信本第3章 栈和队列 自测卷答案一、填空题(每空1分,共15分)1.向量、栈和队列都是 线性 结构,可以在向量的 任何 位置插入和删除元素;对于栈只能在 栈顶 插入和删除元素;对于队列只能在 队尾 插入和 队首 删除元素。

2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为 栈顶 。

不允许插入和删除运算的一端称为 栈底 。

3. 队列 是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。

4. 在一个循环队列中,队首指针指向队首元素的 前一个 位置。

5. 在具有n 个单元的循环队列中,队满时共有 n-1 个元素。

6. 向栈中压入元素的操作是先 移动栈顶指针 ,后 存入元素 。

7. 从循环队列中删除一个元素时,其操作是 先 移动队首指针 ,后 取出元素 。

8.带表头结点的空循环双向链表的长度等于 0 。

解:二、判断正误(判断下列概念的正确性,并作出简要的说明。

)(每小题1分,共10分)( × )1. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。

错,线性表是逻辑结构概念,可以顺序存储或链式存储,与元素数据类型无关。

( × )2. 在表结构中最常用的是线性表,栈和队列不太常用。

错,不一定吧?调用子程序或函数常用,CPU 中也用队列。

( √ )3. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。

( √ )4. 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。

正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。

( × )5. 栈和链表是两种不同的数据结构。

错,栈是逻辑结构的概念,是特殊殊线性表,而链表是存储结构概念,二者不是同类项。

( × )6. 栈和队列是一种非线性数据结构。

错,他们都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。

数据结构第三章习题

数据结构第三章习题

数据结构第三章习题3.1 单项选择题2.一个栈的入栈序列a, b, c, d, e, 则栈的不可能的输出序列是。

A. edcbaB. DecbaC. DceabD. abcde3. 若已知一个栈的入栈序列是1,2,3,………..n, 其输出序列为p1, p2, p3,……,pn, 若p1=n, 则pi为。

A.i.B. n=IC. n- i+1D.不确定4.栈结构通常采用的两种存储结构是。

A. 顺序存储结构和链表存储结构B. 散链方式和索引方式C.链表存储结构和数组D. 线性存储结构和非线性存储结构5.判定一个栈ST(最多元素为m0)为空的条件是。

A. ST->top<>0B. ST->top=0C.ST->top<>m0D.ST->top=m06.判定一个栈ST(最多元素为m0)为栈满的条件是。

A. ST->top!=0B.ST->top==0C.ST->top!=m0D.ST->top==m07.栈的特点是,队列的特点是。

A先进先出 B. 先进后出8. 一个队列的入栈序列是1,2,3,4,则队列的输出序列是。

A. 4,3,2,1B. 1,2,3,4C. 1,4,3,2D. 3,2,4,19. 判定一个队列QU(最多元素为m0)为空的条件是。

A.QU->rear- QU->front==m0B.QU->rear- QU->front-1==m0C.QU->front== QU->rearD. QU->front== QU->rear+110.判定一个队列QU(最多元素为m0)为满队列的条件是。

A.QU->rear- QU->front==m0B.QU->rear- QU->front-1==m0C.QU->front== QU->rearD.QU->front== QU->rear+111. 判定一个循环队列QU(最多元素为m0)为空的条件是。

数据结构(第二版)习题答案第3章

数据结构(第二版)习题答案第3章

第3章‎线性表的链‎式存储‎3.1‎选择题(‎1)两个有‎序线性表分‎别具有 n‎个元素与‎m个元素且‎n≤m,‎现将其归并‎成一个有序‎表,其最‎少的比较次‎数是( A‎)。

‎A.n B‎.m C.‎n . 1‎D.m ‎+ n(‎2)非空的‎循环单链表‎head‎的尾结点(‎由 p所指‎向)满足(‎C)。

‎A.p-‎>next‎==NUL‎L B.p‎==NUL‎L C.p‎->nex‎t==he‎a d D.‎p==he‎a d(‎3)在带头‎结点的单链‎表中查找‎x应选择的‎程序体是(‎C )。

‎A.n‎o de *‎p=hea‎d->ne‎x t; w‎h ile ‎(p &&‎p->i‎n fo!=‎x) p=‎p->ne‎x t;‎i f (p‎->inf‎o==x)‎retu‎r n p ‎e lse ‎r etur‎n NUL‎L;B‎.node‎*p=h‎e ad; ‎w hile‎(p&&‎p->i‎n fo!=‎x) p=‎p->ne‎x t; r‎e turn‎p;‎C.nod‎e *p=‎h ead-‎>next‎; whi‎l e (p‎&&p->‎i nfo!‎=x) p‎=p->n‎e xt; ‎r etur‎n p; ‎D.no‎d e *p‎=head‎; whi‎l e (p‎->inf‎o!=x)‎p=p-‎>next‎; re‎t urn ‎p;(4‎)线性表若‎采用链式存‎储结构时,‎要求内存中‎可用存储单‎元的地址(‎D )。

‎A.必‎须是连续的‎B.部分‎地址必须是‎连续的‎C.一定是‎不连续的‎D.连续不‎连续都可以‎(5)在‎一个具有‎n个结点的‎有序单链表‎中插入一个‎新结点并保‎持单链表仍‎然有序的时‎间复杂度‎是( B ‎)。

数据结构课后答案第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为队尾元素的位置,计算队列中元素个数的公式为()。

【解答】(rear-front+n)% n【分析】也可以是(rear-front)% n,但rear-front的结果可能是负整数,而对一个负整数求模,其结果在不同的编译器环境下可能会有所不同。

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

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

⑼串是一种特殊的线性表,其特殊性体现在()。

数据结构 第3章答案(已核)

数据结构 第3章答案(已核)

3.5习题一、名词解释(1)栈栈是限制在表的一端进行插入和删除操作的线性表。

允许插入、删除的这一端称为栈顶,另一个固定端称为栈底。

栈的顺序结构:利用顺序存储方式实现的栈称为顺序栈。

栈的链式结构:用链式存储结构实现的栈称为链栈。

(2)队队是一种“先进先出” (FIFO---First In First Out)的数据结构,即插入操作在表一端进行,而删除操作在表的另一端进行,这种数据结构称为队列。

把允许插入的一端称为队尾(rear),把允许删除的一端称为队头(front)。

队的顺序结构:顺序存储的队称为顺序队。

队的链式结构:采用链式存储结构的队称为链队。

二、判断题(1)栈和队列都是特殊的线性表。

( √ )(2)栈和队列都将插入和删除操作限制在表的端点处进行。

(√ )(3)只允许在表的一端进行插入和删除操作的线性表称为栈。

(√)(4)没有元素的栈称为空栈,空栈用不着栈顶指针。

( × )(5)只要栈不空,就能任意删除栈的元素。

(× )(6)栈允许删除的一端称为栈顶,而栈底元素是不能删除的。

(× )(7)对采用链式存储结构的栈进行操作不必判断溢出。

(√ )(8)元素进出队列一定满足“先进先出”的规律。

(√ )(9)链队列不存在溢出问题。

(√ )(10)在链队列中删除一个元素是在链表的最前端进行的。

(√ )三、单项选择题(1)栈和队列的共同之处在于它们具有相同的( A )。

A.逻辑特性 B.物理特性 C.运算方法 D.元素类型(2)栈和队列都是特殊的线性表,其特殊性在于( C )。

A.它们具有一般线性表所没有的逻辑特性B.它们的存储结构比较特殊C.对它们的使用方法做了限制D.它们比一般线性表更简单(3)若5个元素的出栈序列为1,2,3,4,5,则进栈序列可能是( )。

A.2,4,3,1,5 B.2,3,1,5,4C.3,1,4,2,5 D.3,1,2,5,4(4)某队列初始为空,若它的输入序列为a,b,c,d,它的输出序列应为( )。

数据结构第三章习题及解答

数据结构第三章习题及解答

数据结构第三章习题及解答Chap3一选择题1. 对于栈操作数据的原则是(B)。

A. 先进先出B. 后进先出C. 后进后出D. 不分顺序2. 在作进栈运算时,应先判别栈是否( B ),在作退栈运算时应先判别栈是否( A )。

当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为( B )。

A. 空B. 满C. 上溢D. 下溢③: A. n-1 B. n C. n+1 D. n/23. 一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是(B)。

A. 不确定B. n-i+1C. iD. n-i4. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?(C)A. 5 4 3 6 1 2B. 4 5 3 1 2 6C. 3 4 6 5 2 1D. 2 34 15 65. 设栈的输入序列是1,2,3,4,则(D)不可能是其出栈序列。

A. 1,2,4,3,B. 2,1,3,4,C. 1,4,3,2,D. 4,3,1,2,6. 设一个栈的输入序列是1,2,3,4,5,则下列序列中,是栈的合法输出序列的是(D)。

A. 5 1 2 3 4B. 4 5 1 3 2C. 4 3 1 2 5D.3 2 1 5 47. 设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是( C)。

A.XYZ B. YZX C. ZXYD. ZYX8. 执行完下列语句段后,i值为:(B)int f(int x){ return ((x>0) ? x* f(x-1):2);}int i ;i =f(f(1));A.2 B. 4 C. 8 D. 无限递归9. 用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( D )。

A.仅修改队头指针 B. 仅修改队尾指针C. 队头、队尾指针都要修改D. 队头,队尾指针都可能要修改10. 递归过程或函数调用时,处理参数及返回地址,要用一种称为( C )的数据结构。

数据结构习题答案第三章

数据结构习题答案第三章

void DSqStack <ElemType>::Pop(int i) {//i 的取值为 0 或 1
if (i == 0) top[0]--;
else top[1]++;
}//Pop
5. (1). A, C, D (2). 从左到右读序列,任何时候累计 I 的个数都应大于等于 O 的个数。 (3). bool islegal(char *a) {
newbase[k + 10] = base[k];
delete[] base;
base = newbase;
size += 10;
top[1] += 10;
}
if (i == 0)
base[++top[0]] = e;
else
base[--top[1]] = e;
}//Push
//出栈,弹出栈顶元素。先决条件是栈非空。 template <class ElemType>
ElemType & Top(int i) const;
void Push(const ElemType &e,int i);
void Pop(int i);
private:
//双向栈类的数据成员
ElemType *base; //基地址指针
int top[2];
//栈顶指针
int size;
//向量空间大小
//void Leabharlann lear();//bool Empty() const;
//int Length() const;
//ElemType & GetHead() const;

数据结构单元3练习参考答案

数据结构单元3练习参考答案
单元练习3
一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)
(√)(1)栈是运算受限制的线性表。
(√)(2)在栈空的情况下,不能作出栈操作,否则产生下溢出。
(ㄨ)(3)栈一定是顺序存储的线性结构。
(√)(4)栈的特点是“后进先出”。
(ㄨ)(5)空栈就是所有元素都为0的栈。
(ㄨ)(6)在C或C++语言中设顺序栈的长度为MAXLEN,则top=MAXLEN时表示队满。
int correct(char a[ ])
{
stack s ;
InitStack(s);//调用初始化栈函数
for(i=0;i<strlen(a);i++)
if (a[i]= =’(’)
Push (s,’(’);
else if (a[i]= =’)’)
{
if StackEmpty(s)//调用判栈空函数
(13)经过下列栈的运算后,再执行ReadTop(s)的值是(A)。
InitStack(s)(初始化栈);Push(s,a);Push(s,b); Pop(s)
A.aB.bC.1D.0
(14)经过下列栈的运算后,x的值是(B)。
InitStack(s)(初始化栈);Push(s,a);Push(s,b);ReadTop(s);Pop(s,x);
(7)带头结点的链栈LS的示意图如下,栈顶元素是(A)
LS
H
A
B
C
D
Λ
A.AB.BC.CD.D
(8)链栈与顺序栈相比,有一个比较明显的优点是( B )。
A.插入操作更加方便B.通常不会出现栈满的情况。
C.不会出现栈空的情况D.删除操作根加方便
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ListNode<Type> *p, *head = new ListNode<Type> ( );
while ( first != NULL ) {
p = first; first = first→link; //摘下first链头结点
p→link = head→link; head→link = p; //插入head链前端
while ( p != NULL && p→data <= value )
{ q = p; p = p→link; } //寻找新结点插入位置
q→link = s; s→link = p; //在q, p间插入新结点
if ( p == NULL ) last = s;
q = pr→link; pr→link = p; //链指针pr→link逆转指向p
p = pr; pr = q; i++; //指针pr, p左移
}
cout << "左移了" << i << "个结点。" << endl;
if ( i < k ) { pr = p; p = NULL; } //指针p移出表外,重置p, pr
const int maxLen = 300; //字符串最大长度为300(理论上可以无限长)
class string1 {
public:
string1 ( ); //构造空字符串
string1 ( char * obstr ); //从字符数组建立字符串
return p;
}
3-3 设ha和hb分别是两个带表头结点的非递减有序单链表的表头指针, 试设计一个算法, 将这两个有序链表合并成一个非递增有序的单链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中允许有重复的数据。
【解答】
#include <iostream.h>
//构造函数, 仅初始化指针成员。
template <class Type>
ListNode<Type>::ListNode ( const Type & item )
: data ( item ), link ( NULL ) { }
//构造函数, 初始化数据与指针成员。
}
cout << "右移了" << i << "个结点。" << endl;
}
(2) 指针p左移k个结点
template<class Type> void List<Type> ::
siftToLeft ( ListNode<Type> *& p, ListNode<Type> *& pr, int k ) {
}
first = head→link; delete head; //重置first
}
3-7 从左到右及从右到左遍历一个单链表是可能的,其方法是在从左向右遍历的过程中将连接方向逆转,如右图所示。在图中的指针p指向当前正在访问的结点,指针pr指向指针p所指结点的左侧的结点。此时,指针p所指结点左侧的所有结点的链接方向都已逆转。
while ( pa != NULL && pb != NULL ) { //当两链表都未结束时
if ( pa→data <= pb→data )
{ q = pa; pa = pa→link; } //从pa链中摘下
else
{ q = pb; pb = pb→link; } //从pb链中摘下
void Merge ( List<Type> &hb ); //连接链表
private:
ListNode<Type> *first, *last;
};
ቤተ መጻሕፍቲ ባይዱ
//各成员函数的实现
template <class Type>
ListNode<Type>::ListNode ( ) : link ( NULL ) { }
while ( p != NULL ) {
cout << p→data;
if ( p != last ) cout << "→";
else cout << endl;
p = p→link;
}
}
template <class Type> void List <Type> :: Merge ( List<Type>& hb) {
~string1 ( ); //析构函数
int Length ( ) const { return curLen; } //求字符串长度
template <class Type> class List;
template <class Type> class ListNode {
friend class List<Type>;
public:
ListNode ( ); //构造函数
ListNode ( const Type& item ); //构造函数
else i = 0;
while ( p != NULL && i < k ) { //右移k个结点
q = p→link; p→link = pr; //链指针p→link逆转指向pr
pr = p; p = q; i++; //指针pr, p右移
if ( p == NULL && pr == first ) { //已经在链的最左端
cout << "已经在链的最左端,不能再左移。" << endl;
return;
}
int i = 0; ListNode<Type> *q;
while ( pr != NULL && i < k ) { //左移k个结点
template <class Type>
List<Type> :: List ( const Type finishied ) {
//创建一个带表头结点的单链表,finished是停止建表输入的标志,
//是所有输入值中不可能出现的数值。
first = last = new ListNode<Type>( ); //创建表头结点
cout << "已经在链的最右端,不能再右移。" << endl;
return;
}
int i; ListNode<Type> *q;
if ( p == NULL ) //从链头开始
{ i = 1; pr = NULL; p = first; } //重置p到链头也算一次右移
q→link = first→link; first→link = q; //链入结果链的链头
}
p = ( pa != NULL ) ? pa : pb; //处理未完链的剩余部分
while ( p != NULL ) {
q = p; p = p→link;
【解答】
(1) 指针p右移k个结点
template<class Type> void List<Type> ::
siftToRight ( ListNode<Type> *& p, ListNode<Type> *& pr, int k ) {
if ( p == NULL && pr != first ) { //已经在链的最右端
(1) 编写一个算法,从任一给定的位置(pr, p)开始,将指针p右移k个结点。如果p移出链表,则将p置为0,并让pr停留在链表最右边的结点上。
(2) 编写一个算法,从任一给定的位置(pr, p)开始,将指针p左移k个结点。如果p移出链表,则将p置为0,并让pr停留在链表最左边的结点上。
}
3-9 试写出用单链表表示的字符串类及字符串结点类的定义,并依次实现它的构造函数、以及计算串长度、串赋值、判断两串相等、求子串、两串连接、求子串在串中位置等7个成员函数。要求每个字符串结点中只存放一个字符。
【解答】
//用单链表表示的字符串类string1的头文件string1.h
#include <iostream.h>
//将当前链表this与链表hb按逆序合并,结果放在当前链表this中。
ListNode<Type> *pa, *pb, *q, *p;
pa = first→link; pb = hb.first→link; //检测指针跳过表头结点
first→link = NULL; //结果链表初始化
cin >> value;
}
}
template <class Type>void List<Type> :: Browse ( ) {
//浏览并输出链表的内容
cout<<"\nThe List is : \n";
相关文档
最新文档