栈和队列的基本操作
(1)顺序栈
(2)链栈
(3)链队列
(4)循环队列
以下代码仅仅作为参考
世上没有完美的代码,只有更好的代码。从健壮性的角度考虑以下代码可能在特殊情况下会出现错误,所以仅仅作为参考思路。
(1)顺序栈
#include<iostream>
using namespace std;
typedef int ElementType;
#define MAXSIZE 100
typedef struct node {
ElementType Data[MAXSIZE];
int top;
}Stack;
bool initStack(Stack *s) { //初始化栈
s->top = -1;
return true;
}
bool ClearStack(Stack*s) { //清空栈
s->top = -1;
return true;
}
bool isEmptyStack(Stack *s) { //判断栈是否为空
if (s->top == -1)return false;
else return true;
}
bool push(Stack *s,ElementType e) { //入栈操作
if (s->top + 1 == MAXSIZE) {
cout<<"栈满,无法存放元素";
return false;
}
else {
s->top++;
s->Data[s->top] = e;
return true;
}
}
bool pop(Stack *s, ElementType *e) { //出栈操作
if (s->top == -1) {
cout << "栈为空";
return false;
}
else {
*e = s->Data[s->top];
s->top--;
return true;
}
}
int gettop(Stack *s) { //得到栈顶操作
if (s->top == -1) {
cout << "栈为空无法得到栈顶元素";
}
else {
return s->Data[s->top];
}
}
void traverse(Stack *s) { //对栈进行遍历
if (s->top == -1)cout << "栈为空";
int i = s->top;
while (i >=0) {
cout <<