live long and prosper.
本内容参考《数据结构教程》李春葆
##顺序表
作为线性表的一种,在应用简单的顺序表结构具有一定的优势,下面来浅显的看一下使用顺序表是如何实现的。
顺序栈:使用顺序存储结构的栈。
1.声明栈的类型:
typedef struct
{
int data[5];
int top;
}Sqstack;
在上面的代码中,将int类型为例,在实际的应用中可以使用其它数据类型。这里我们也将使用栈指针的方式创建和使用顺序栈。同时顺序表节点的数量可以自定义,这里定为5.
另外注意,在顺序栈中,除了要为栈预留存储空间,还要为栈指针预留空间。
2.初始化顺序栈
初始化时,要为栈创建空间,向创建一个空栈,s指向它,同时s->top=-1,0以后的空间则为顺序表存储数值
void initStack(Sqstack*&s)
{
s=(Sqstack*)malloc(sizeof(Sqstack));
s->top=-1;
}
3.销毁顺序栈
void destroyStack(Sqstack*&s)
{
free(s);
}
4.判断栈是否为空
bool Stackempty(Sqstack*&s)
{
return (s->top==-1);
}
5.进栈
进栈首先判断栈是否已满,如果未满,将栈顶指针加一,然后在指针指向的位置插入需要添加的元素,并返回为真;否则返回假.
bool Push(Sqstack*&s,int e)
{
if(s->top==4)
return false;
s->top++;
s->data[s->top]=e;
return true;
}
5.出栈
该过程中,在栈不为空的情况下,将栈顶元素赋给额,然后栈顶指针减一,并返回为真,否则假。
bool Pop(Sqstack*&s,int e)
{
if(s->top==-1)
return false;
e=s->data[s->top];
s->top--;
return true;
}
6.取栈顶元素
在栈不为空的情况下,将栈顶元素赋给e,并返回真,否则假。
bool getTop(Sqstack*&s,int e)
{
if(s->top==-1)
return false;
e=s->data[s->top];
return true;
}
下面总结一下在顺序栈运算过程中的一些基本小算法;
·判断栈空的条件:s->top==-1;
·判断栈满的条件:s->top==MAXSIZE-1;(maxsize为顺序表数据域的大小)
·进栈操作:先将栈顶指针加一,在将值赋给栈顶指针所在位置
·出栈操作:先将栈顶元素赋给e,然后将栈顶指针减一
·进栈操作:先将栈顶指针加一,在将值赋给栈顶指针所在位置
·出栈操作:先将栈顶元素赋给e,然后将栈顶指针减一
如有错误,欢迎斧正