一.含义
堆指先进先出,栈指先进后出。
对于堆栈有两种操作:
- 进栈指令(PUSH):在栈中现有元素顶部添加一个元素,新加入的元素变为最顶端的元素。
- 出栈指令(POP):取出栈顶元素,删除栈中的这个元素
-
PUSH:向堆栈中加入数据。POP:取出堆栈中的数据。
二.栈的顺序存储实现
1.栈顶
#include<bits/stdc++.h>
using namespace std;
#define MaxSize 100
struct SNode {
int Date[MaxSize];
int Top;
};
typedef SNode* stack;
2.生成空栈
Stack CreateStack()
{
Stack S = (Stack)malloc(sizeof(struct SNode));
S->Top = -1;
return S;
}
3.入栈
void Push(stack a, int b) {
if (a->Top == MaxSize - 1)
{
cout << "堆栈已满!\n";
return;
}
else
{
a->Date[++(a->Top)]=b;
return;
}
}
4.出栈
int Pop(Stack a)
{
if (a->Top == -1)
{
cout << "堆栈为空!\n";
return -1;
}
else
return (a->Date[(a->Top)--]);
}
5.栈内元素显示
void Display(Stack a) {
cout << a->Data[(a->Top)--];
while ((a->Top) != -1)
cout << " " << a->Data[(a->Top)--];
cout << endl;
}//倒序输出
void Display1(Stack a) {
cout << a->Data[0];
for (int i = 1;i <= (a->Top);i++)
cout << " " << a->Data[i];
cout << endl;
}//正序输出
三.栈的链式存储实现
1.栈头
#include<bits/stdc++.h>
using namespace std;
struct SNode {
int Data;
struct SNode* Next;
};
typedef struct SNode* Stack;
2.生成空栈
Stack CreateStack()
{
Stack S = (Stack)malloc(sizeof(struct SNode));
//S->Data[0] = (int*)malloc(MaxSize * sizeof(int));
S->Next = NULL;
return S;
}
3.入栈
void Push(Stack a, int b) {
Stack p;
p = (Stack)malloc(sizeof(struct SNode));
p->Data = b;
p->Next = a->Next;
a->Next = p;
}
4.出栈
int Pop(Stack a)
{
Stack p;
int pp;
if (a->Next == NULL) {
cout << "堆栈为空!\n";
return NULL;
}
else
{
p = a->Next;
pp = p->Data;
a->Next = p->Next;
free(p);
return pp;
}
}
5.栈内元素显示
void Display(Stack a) {
Stack p = a->Next;
if(p!= NULL)
cout << p->Data;
p = p->Next;
while (p != NULL)
{
cout << " " << p->Data;
p = p->Next;
}
cout << endl;
}