来源:互联网 发布:网络电视机顶盒哪个牌子好 编辑:程序博客网 时间:2024/06/05 18:12

Q:栈的定义和实质
A:栈是一种特殊的数据结构,存入其中的数据先进后出,即最后存入的数据在读取时会被第一个读取;栈的实质是只能在表尾进行插入和删除的线性表,也就是说,栈本身就是一个线性表,只是操作方式较为特殊。
Q:栈的组成和相关操作
A:栈中允许插入和删除的一端称为栈顶(top),另外一端称为栈底,不含任何元素的栈称为空栈。栈简称LIFO结构,栈作为特殊的线性表,具有线性表的特性,用于插入和删除的表尾就是指栈顶(top),栈的插入称为压栈,进栈或者入栈(push);删除称为出栈,弹栈(pop)。

Q:栈的接口
A:ADT (stack)

Data

Qperation

InitStack(*S);建立空栈

DestroyStack(*S);判断是否存在栈

ClearStack(*S);清空栈

StackEmpty(S);判断栈是否为空

Gettop(S,*e);栈顶元素值

Push(*s,e);压栈

Pop(*S,*e);出栈

StackLength(S);求栈长

endADT
Q:栈的顺序储存结构及其实现
A:栈底为下标为0的一端,所以top-1时栈为空栈;栈的结构定义:

typedef int SElemtype;根据需求定义Selemtype变量类型

Typedef struct

{

SElemtype data[MAXSIZE];

Int top;用于指针指向栈顶

}Sqstack;
Q:如何实现进栈操作?
A:进栈操作即将数据压入栈顶,代码如下:

Status Push(SqStack *S,SElemtype e)

{

If(S->top == MAXSIZE -1)

{

Return ERROR;判断是否栈满

}

S->top++;栈顶指针加一

S->data[s->top] = e;将新元素压入栈顶

return OK;

}
Q:如何实现出栈?

A:出栈即将栈顶数据赋给指定变量,删除栈顶元素,代码如下:

Status Pop(SqStack *S,SElemtype e)

{

If(S->top == -1)

{

Return ERROR;判断是否空栈;

}

*e = S->data[s->top];将栈顶元素赋给e

S->top--;栈顶指针减一

return OK;

}
Q:两栈共享空间如何实现?
A:我所理解两栈共享空间就是将栈中间剖开,在n-1n之间挖一个洞,将原有的两端分别作为两个栈的栈底,而nn-1作为新的栈顶,但由于两者剖开并没有断开,所以两者的空间可以共享。
Q:两栈共享空间的进栈和出栈怎么实现?
A:两站共享空间由于是剖开的只是中间断开,实质上容量没有增加,当两栈元素都满了之后,两栈栈顶为同一段空间时,说明栈满,此时压不进新元素,从另一个角度讲,只要两栈栈顶没有变为同一段空间,那就可以继续压入数据;出栈时,当两栈都为空即说明栈溢出,栈底兜不住了,再出就挖出界了。
Q:栈的链式储存结构怎么实现?
A:链式结构中,栈顶放在单链表的头部,空栈时就是栈顶指向NULL的时候,链栈不存在栈满的情况。