来源:互联网 发布:新日铁软件 编辑:程序博客网 时间:2024/06/05 04:16

一、顺序栈
1.结构体

typedef struct{    int data[maxSize];//此处采用了静态存储    int top;          //栈顶指针}SqStack;

2.操作
(1)入栈(在入栈操作前,需要判断栈非满,即top!=maxSize-1)

top++;                 //栈顶指针往后移一个单位data[top]=x;           //把新元素放入

(2)出栈(在出栈操作前,需要判断栈非空,即top!=-1)

x=data[top];          //把栈顶元素赋值给xtop--;                //栈顶指针往前一个单位

二、链式栈
1.结构体

typedef struct Stack{    int data;             //存放数据    struct Stack* link;    //存放下一个节点的地址}Stack;Stack * head;              //栈头

2.操作
(1)入栈

Stack * top;              //申请新节点的指针top = new Stack;          //分配内存空间top->data=x;              //将新元素x赋值top->link=head->link;     //指向原先第一个节点head->link=top;           //栈头指向新节点

(2)出栈

Stack * top;top=head->link;          //top指向栈顶节点x=top->data;             //取出栈顶节点的数据head->link=top->link;    //栈头指向第二个节点(出栈后的新栈顶)delete top;             //删除top所指向的内存空间    

总结

1.栈属于线性结构的一种,基本功能就是:先进后出。基本操作:入栈(判满)出栈(判空)

2.不论是顺序栈还是链式栈,其实现并不难。由于在链式栈中,操作只在链表头部进行,没有查询操作,链表相对数组的最大的劣势在栈中被消除。硬要说链表的缺陷的话,就是链表比数组多了指针域空间。个人认为在栈上,链式栈完胜顺序栈。

3.栈的应用:递归过程可以通过栈改为非递归过程