#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define SIZE 10
// 数据域
typedef struct LData {
int c; // 常数
} LData;
// 单链表
typedef struct SNode {
LData data; //数据域
int top; //栈顶
int base; // 栈底
int stack_size;
} SNode;
// 初始化栈
SNode *InitStack(){
SNode *s;
s = (SNode *) malloc(SIZE* sizeof(SNode));
s->base = 0;
s->top = s->base;
s->stack_size = SIZE;
return s;
}
//入栈
void push(SNode *s, int e){
if(s->top - s->base == s->stack_size){
printf("栈已满\n");
return;
}
s[s->top].data.c = e;
s->top++;
}
// 出栈
void pop(SNode *s){
if(s->top == s->base){
printf("栈为空\n");
return;
}
printf("出栈元素:%d\n", s[s->top-1].data.c);
s->top--;
}
// 清空栈
void clearStack(SNode *s){
if(s->top == s->base){
printf("栈已为空\n");
return;
}
s->top = s->base;
}
// 销毁栈
void destroyStack(SNode **s){
if(*s == NULL){
printf("栈已销毁\n");
return;
}
free(*s); // 不确定
*s = NULL;
}
//获取栈的长度
void getStackLength(SNode *s){
printf("栈的长度是:%d\n", s->top);
}
int main() {
//测试
SNode *s;
s = InitStack();
push(s, 1);
push(s, 2);
push(s, 3);
push(s, 4);
push(s, 5);
push(s, 6);
push(s, 7);
getStackLength(s);
push(s, 8);
push(s, 9);
push(s, 10);
push(s, 11);
pop(s); // 1
pop(s); // 2
pop(s); // 3
pop(s); // 4
pop(s); // 5
pop(s); // 6
pop(s); // 7
pop(s); // 8
pop(s); // 9
printf("清空栈\n");
clearStack(s);
pop(s); // 10
pop(s); // 11
printf("销毁栈前地址:%p\n", s);
destroyStack(&s);
printf("销毁栈后地址:%p\n", s);
return 0;
}
顺序表实现栈的入栈、出栈、清空、销毁等
最新推荐文章于 2024-06-14 11:15:55 发布