栈的基本

来源:互联网 发布:上饶师范学院网络教育 编辑:程序博客网 时间:2024/05/29 15:39
#include<stdio.h>                            //用数组创建栈#include<stdlib.h>#define stack_init_size 100#define stack_newlenth  100                   //新增加的长度struct stack{ int size; int *top; int *base;}s;void initstack()                                    //初始化栈{ s.base=(int *)malloc(stack_init_size * sizeof(int));            //s.base 指向的地址大小为层数*int字节数 if(!s.base)                                                     //如果s.base为空,则分配失败。正常应该存地址  printf("分配空间失败"); s.top=s.base;                                                   //注意不能赋反 s.size=stack_init_size;}int is_empty()                                     //判断栈是否为空{if(s.base==s.top)return 1;else return 0;}void push(int i)                                            //入栈{ if(s.top-s.base>=s.size) {  s.base=(int *)realloc(s.base,(stack_init_size+stack_newlenth)*sizeof(int));    if(!s.base)                //如果内存满,重新分配。如果分配的内存被占用,则realloc函数自动复制所有值重新寻找新的空间   printf("重新分配失败");  s.top=s.base+s.size;  s.size=stack_init_size+stack_newlenth; } *s.top=i; s.top++;}int out()                         //出栈{ int e; if(is_empty() )  return 0; s.top--; e=*s.top; return e;}int gettop()                        //栈顶元素{  int num; if(is_empty()) {  printf("impossible!");  return 0; }   num=*(s.top-1); return num;}int  main(){ int n,i,x,j,k,q;printf("输入入栈次数:"); scanf("%d",&n); for(i=1;i<=n;i++) {  printf("输入操作数:");  scanf("%d",&x);  if(x==1)  {   scanf("%d",&j);   push(j);  }  else if( x==2)  {    k=out();   if(k)              k;   else    {        printf("impossible!");               //如果栈为空就不能再出战,程序结束    return 0;   }  }  else if(x==3)  {   q=gettop();   if(q)   {    printf("栈顶元素为:");     printf("%d\n",q);   }            else     return 0;                    //如果栈为空,则查看不了栈顶元素,程序结束;        } } return 0;}//其次还有清空栈和销毁栈//清空就是让s.top==s.base//销毁就是free(s.base);


 

0 0
原创粉丝点击