1、 栈(stack)又名堆栈,它是一种运算受限的线性表。 限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。
2、向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
3、从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
//顺序栈的实现
#include <stdlib.h>
#include <stdio.h>
#define MAX_SIZE 10
typedef struct Stack {
int data[MAX_SIZE];
// 栈
int top;
// 栈顶
int length;
// 栈的大小
} stack;
// 初始化栈
void InitStack(stack *s) {
s->top = -1;
s->length = -1;
printf("初始化完成...\n");
}
// 判断是否为空
int IsEmpty(stack *s) {
if(s->top == -1)
return 1;
return 0;
}
// 进站
void Push(stack *s,int val) {
if(s->top >= MAX_SIZE-1) {
printf("栈满无法入栈...");
return;
}
s->top++;
s->data[s->top] = val;
s->length++;
}
// 出站
int Pop(stack *s) {
if(IsEmpty(s)) {
printf("栈为空,无元素可出栈...");
return;
}
s->length--;
return s->data[s->top--];
}
// 返回栈顶元素
int GetTop(stack *s) {
if(IsEmpty(s)) {
printf("栈为空,无栈顶元素...");
return;
}
return s->data[s->top];
}
// 销毁栈
void Detory(stack *s){
free(s);
printf("栈已销毁...\n");
}
// 清空栈
void Clear(stack *s){
s->top = -1;
s->length = -1;
printf("清空完成...\n");
}
// 打印栈中元素
void Display(stack *s){
printf("打印栈顺序为:Top->Bottom\n");
int i=s->length;
for(i;i>=0;i--){
printf("%d\t", s->data[i]);
}
printf("\n");
}
int main() {
srand((unsigned)time(0)); // 设置随机数种子
stack s;
InitStack(&s); // 初始化
printf("是否为空栈:%s\n", IsEmpty(&s)?"true":"false");
printf("生成随机数入栈\n");
int i;
for(i=0; i<MAX_SIZE; i++) {
Push(&s, rand() % 100); // 生成随机数
}
printf("是否为空栈:%s\n", IsEmpty(&s)?"true":"false");
Display(&s); // 打印栈
printf("栈顶元素为:%d\n", GetTop(&s));
printf("出栈元素为:%d\n", Pop(&s));
Display(&s);// 打印栈
}