数据结构之栈的c语言实现

来源:互联网 发布:i mean it 编辑:程序博客网 时间:2024/04/25 17:30
#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 20           //栈的初始化容量#define STACK_INCREMENT_SIZE 10      //栈满时追加栈的容量#define OK 1#define ERROR 0;typedef int ElemType;typedef int Status;typedef struct {ElemType *top;     //栈顶指针ElemType *base;    //栈底指针ElemType size;     //栈的容量}SqStack;//初始化栈SqStack* InitStack(){SqStack *s = (SqStack *)malloc(sizeof(SqStack));if (!s)exit(0);s->base = (ElemType*)malloc(sizeof(ElemType) * STACK_INIT_SIZE);if (!s->base)exit(0);s->top = s->base;s->size = STACK_INIT_SIZE;return s;}//进栈Status Push(SqStack *s, ElemType n){if (s->top - s->base >= s->size){//栈满,需要申请更大空间s->base = (ElemType*)realloc(s->base, (s->size + STACK_INCREMENT_SIZE) * sizeof(ElemType));if (!s->base){printf("Stack increment size error!\n");return ERROR;}s->top = s->base + s->size;         //修改栈顶指针s->size += STACK_INCREMENT_SIZE;    //修改栈的存储大小printf("stack increment\n");}*(s->top) = n;(s->top)++;printf("push data %d in stack success\n", n);return OK;}//从栈底到栈顶依次访问元素Status StackTraverse(SqStack *s){printf("stack从下到上的数据为: \n");ElemType *p = s->base;while (p != s->top)printf("%d ", *p++);printf("\n");return OK;}//栈顶元素出栈ElemType Pop(SqStack *s){if (s->base == s->top) {     //栈为空printf("stack is empty!\n");exit(0);}else{(s->top)--;return *(s->top);}}//访问栈顶元素ElemType GetTop(SqStack *s){if (s->top == s->base) {       //栈为空printf("stack is empty!\n");exit(0);}else return *(s->top - 1);}int main(){SqStack* s = InitStack();int i;for (i = 0; i < 25; i++){Push(s, i * 2);}StackTraverse(s);printf("get stack top: %d\n", GetTop(s));ElemType e = Pop(s);printf("pop stack: %d\n", e);StackTraverse(s);free(s);return 0;}


执行结果:


0 0
原创粉丝点击