栈
来源:互联网 发布:新日铁软件 编辑:程序博客网 时间: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.栈的应用:递归过程可以通过栈改为非递归过程