Welcome

首页 / 软件开发 / 数据结构与算法 / 数据结构的C++实现之栈的顺序存储结构

数据结构的C++实现之栈的顺序存储结构2013-08-17栈(stack)是限定在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。


 

示例程序:(改编自《大话数据结构》)

#include <iostream>using namespace std;#defineMAXSIZE 20typedef int ElemType;typedef struct{ElemType data[MAXSIZE];int top; //栈顶指针} SqStack;/* 构造一个空栈*/bool InitStack(SqStack *Sq){Sq->top = -1; //表示空栈return true;}/* 置为空栈 */bool ClearStack(SqStack *Sq){cout << "Clear Stack ..." << endl;Sq->top = -1;return true;}bool StackEmpty(SqStack Sq){if (Sq.top == -1)return true;elsereturn false;}int StackLength(SqStack Sq){cout << "Stack Length : ";return Sq.top + 1;}/* 返回栈顶元素 */bool GetTop(SqStack Sq, ElemType *ptr){if (Sq.top != -1){*ptr = Sq.data[Sq.top];cout << "Get Top Item " << *ptr << endl;return true;}return false;}/* 压栈 */bool Push(SqStack *Sq, ElemType Elem){cout << "Push Item" << Elem << endl;if (Sq->top + 1 > MAXSIZE - 1)return false;Sq->data[++Sq->top] = Elem;return true;}/* 出栈 */bool Pop(SqStack *Sq, ElemType *ptr){if (Sq->top == -1)return false;*ptr = Sq->data[Sq->top--];cout << "Pop Item" << *ptr << endl;return true;}bool StackTraverse(SqStack Sq){cout << "Traverse Stack ..." << endl;if (Sq.top == -1)return false;for (int i = 0; i <= Sq.top; i++)cout << Sq.data[i] << " ";cout << endl;return true;}int main(void){SqStack Sq;InitStack(&Sq);for (int i = 0; i < 5; i++)Push(&Sq, i);StackTraverse(Sq);int result;Pop(&Sq, &result);StackTraverse(Sq);GetTop(Sq, &result);if (!StackEmpty(Sq))cout << StackLength(Sq) << endl;ClearStack(&Sq);return 0;}
输出为: