栈相当于先进后出的线性表
直接看代码实现:
//
// main.c
// 001-栈的顺序表示和实现
//
#include <stdio.h>
#include <stdlib.h>
//栈的顺序存储结构表示
const static int STACK_INIT_SIZE = 10;
const static int STACKINCREMENT = 10;
typedef char SElemType;
typedef struct {
SElemType * base;//栈底指针,在栈构造之前和销毁之后,都为NULL
SElemType * top; //栈顶指针
int stacksize; //栈的大小(即栈已分配的存储空间)
} SqStack;
int initStack(SqStack * s){ //构造一个空栈
s->base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SqStack));
if (!s->base) {
return 0;
}
s->top = s->base;
s->stacksize = STACK_INIT_SIZE;
return 1;
}
int push(SqStack * s, SElemType elem){
if (s->top - s->base >= s->stacksize) { //如果栈满,追加存储空间
s->base = (SElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(SqStack));
if (!s->base) {
return 0;
}
s->top = s->base + s->stacksize;
s->stacksize += STACKINCREMENT;
}
*s->top++ = elem;
return 1;
}
int pop(SqStack * s, SElemType * elem){
if (s->top == s->base) {
return 0;
}
*elem = *(--s->top);
return 1;
}
int main(int argc, const char * argv[]) {
// insert code here...
// printf("Hello, World!\n");
SqStack s;
initStack(&s);
for (int i = 0; i < 5; i++) {
push(&s, 'A' + i);
}
for (int i = 0; i < 2; i++) {
SElemType elem;
pop(&s, &elem);
printf("pop elem is %c\n", elem);
}
return 0;
}
输出:
pop elem is E
pop elem is D
Program ended with exit code: 0