栈基本操作的C语言实现(附源代码已测试)

来源:互联网 发布:网络课程怎么上 编辑:程序博客网 时间:2024/05/29 04:02

  栈基本操作的C语言实现

///////////////////////////////////      作者:happy_fun        ////  栈基本操作的C语言实现      ////   时间:2011年11月19号      ////   未经作者允许不得转载!    ///////////////////////////////////#include<stdio.h>#include<malloc.h>#include<stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCREACE 10////////////////////////////////typedef struct SElemType{char data;}elemtype;typedef struct SqStack{elemtype *base;//base是变量名字,elemtype *表示base只能存储elemtype类型的变量的地址//int *表示存储整型变量地址elemtype *top;//top是变量名字,elemtype *表示top只能存储elemtype类型的变量的地址,指针就是地址,地址就是指针!int strcksize;}stack,*pstack;////////////////////////////////void main(){int Push(stack *s,elemtype e);int InitStack(stack *s);elemtype Pop(stack *s,elemtype e);elemtype GetTop(stack *s,elemtype e);int StackLength(stack *s);int a;stack s;elemtype e,del;e.data='T';if(InitStack(&s)==1)printf("构造空栈成功!\n\n");if(Push(&s,e))printf("压栈成功!\n\n");printf("返回的栈顶元素为:%c\n\n",GetTop(&s,e));printf("删除的栈顶元素为:%c\n\n",Pop(&s,del));printf("该栈的长度为:%d\n\n",a=StackLength(&s));}//////////////////////////////////构造空栈int InitStack(stack *s)//s是变量名,stack *表示s只能存储stack类型的变量地址{s->base=(elemtype *)malloc(STACK_INIT_SIZE*sizeof(elemtype));s->top=s->base; s->strcksize=STACK_INIT_SIZE;return 1;}/////////////////////////////////将元素e压入栈int Push(stack *s,elemtype e){if(s->top-s->base>=s->strcksize)//栈满追加空间{s->base=(elemtype *)realloc(s->base,(s->strcksize+STACKINCREACE)*sizeof(elemtype));s->strcksize=s->strcksize+(s->strcksize+STACKINCREACE);}if(!s->base)exit(0);*(s->top)=e;s->top++;printf("分配的存储空间为:%d\n",s->strcksize);return 1;}////////////////////////////////删除栈顶元素elemtype Pop(stack *s,elemtype e){if(s->top==s->base){printf("出错!\n");exit(0);}s->top--;e=*(s->top);printf("删除栈顶元素成功!\n");return e;}////////////////////////////////用e返回栈顶元素elemtype GetTop(stack *s,elemtype e){if(s->top==s->base){printf("Error!\n");exit(0);}s->top=s->top-1;e=*(s->top);s->top=s->top+1;return e;}///////////////////////////////返回栈的元素个数,即栈的长度int StackLength(stack *s){int length;length=s->strcksize;return length;}

第一次发帖,数据结构中栈的基本操作的实现,欢迎大家指导!