数据结构之-c语言实现栈的顺序存储
数据结构之---c语言实现栈的顺序存储
//栈的顺序存储 //杨鑫 #include <stdio.h> #include <stdlib.h> //定义栈的大小 #define STACK_INIT_SIZE 10 #define STACKINCREMENT 2 //定义函数返回值的状态 typedef int Status; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 1 #define INFEASIBLE -1 #define OVERFLOW -2 //定义结构体 typedef int SElemType; typedef struct SqStack { SElemType *base; //栈底 SElemType *top; //栈顶 int stacksize; //栈的大小 }SqStack; //栈的初始化 Status init_Stack(SqStack *S) { (*S).base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!(*S).base) exit(OVERFLOW); (*S).top = (*S).base; (*S).stacksize = STACK_INIT_SIZE; return OK; } //栈的销毁 Status destory_Stack(SqStack *S) { free((*S).base); (*S).base = NULL; (*S).top = NULL; (*S).stacksize = 0; return OK; } //栈的清空 Status clear_Stack(SqStack *S) { (*S).top = (*S).base; return OK; } //判断栈是否为空 Status isempty_Stack(SqStack S) { if(S.top == S.base) return TRUE; else return FALSE; } int length_Stack(SqStack S) { return S.top - S.base; } //返回栈顶元素 Status get_Top(SqStack S, SElemType *e) { if(S.top > S.base) { *e = *(S.top - 1); return OK; } else return ERROR; } //压栈 Status push(SqStack *S, SElemType e) { if((*S).top - (*S).base >= (*S).stacksize) { (*S).base= (SElemType *)realloc((*S).base, ((*S).stacksize+STACKINCREMENT) * sizeof(SElemType)); if(!(*S).base) exit(OVERFLOW); (*S).top = (*S).base + (*S).stacksize; (*S).stacksize += STACKINCREMENT; } *((*S).top)++ = e; return OK; } //出栈 Status pop(SqStack *S, SElemType *e) { if((*S).top == (*S).base) return ERROR; *e = *--(*S).top; return OK; } //遍历栈的元素 Status traverse_Stack(SqStack S) { while(S.top > S.base) { printf("%d ", *S.base++); } printf("\n"); return OK; } int main() { int j; SqStack s; SElemType e; if(init_Stack(&s)==OK) for(j=1;j<=12;j++) push(&s, j); printf("栈中元素依次为:\n"); traverse_Stack(s); pop(&s, &e); printf("弹出的栈顶元素 e = %d\n", e); printf("栈空否:%d ( 1 : 空 0:否)\n", isempty_Stack(s)); get_Top(s, &e); printf("栈顶元素 e = %d 栈的长度为 %d \n",e, length_Stack(s)); clear_Stack(&s); printf("清空栈后,栈空否:%d( 1 : 空 0 : 否)\n", isempty_Stack(s)); destory_Stack(&s); printf("销毁栈后,s.top = %u s.base = %u s.stacksize = %d\n", s.top, s.base, s.stacksize); return 0; }
如图: