栈(stack)大家一定不陌生,限定仅在表尾进行插入和删除操作的线性表。

理解栈,首先要理解栈是线性表的特例,只是操作受限制了;栈的顺序存储结构也是线性表顺序存储的简化,对于栈这一种只能一头插入删除的线性表来说,我们可以用数组实现它,但是数组的大小是给定的,如果你想存储的元素个数多于数组的个数,这时候自然而然就想到了动态开辟堆空间,手动申请手动释放……

     自己写了一点函数实……不对的地方望大神给予改正

1栈的定义
2 
3 typedef struct  _stack
4 {
5     int top;
6     elemtype *data;
7     int len;
8 }stack;
//初始化
1
stack *init_seq_stack(int e) 2 { 3 stack *s = (stack *)malloc(sizeof(stack) * 1); 4 if(s == NULL) 5 { 6 return NULL; 7 } 8 s->data = (elemtype *)malloc(sizeof(elemtype) * e); 9 if (s->data == NULL) 10 { 11 return false; 12 } 13 s->top = 0; 14 s->len = e; 15 return s; 16 17 }
 1 static bool alloc(stack *p)
 2 {
 3         if(p == NULL)
 4         {
 5             return false;
 6         }
 7         printf("%d-%d\n",p->len ,p->len * 2);
 8         p->data  = (elemtype *)realloc(p->data, p->len * 2 * sizeof(elemtype));//1024-int
 9         p->len = 2*p->len;
10 
11         return true;
12 
13 }

 

 

  1 bool destory(stack *s)
  2 {
  3     if(s == NULL)
  4     {
  5         return false;
  6     }
  7     free(s->data);
  8     free(s);
  9     return true;
 10 }
 11 
 12 
 13 
 14 bool clear_seqstack(stack *s)
 15 {
 16     if(s == NULL)
 17     {
 18         return false;
 19     }
 20     s->top = 0;
 21     return true;
 22 }
 23 
 24 bool push(stack *s,elemtype e)
 25 {
 26     if(s == NULL)
 27     {
 28         return false;
 29     }
 30     if( is_full(s))
 31     {
 32         alloc(s);
 33     }
 34 
 35     s->data[s->top ++] = e ;
 36     return true;
 37 
 38 }
 39 
 40 
 41 bool pop(stack *s,elemtype *e)
 42 {
 43     if(s == NULL)
 44     {
 45         return false;
 46     }
 47     if(is_empty(s))
 48     {
 49         return false;
 50     }
 51 
 52     *e = s->data[--s->top];
 53     return true;
 54 }
 55 
 56 
 57 bool is_empty(stack *s)
 58 {
 59     if(s == NULL)
 60     {
 61         return false;
 62     }
 63     return s->top == 0;
 64 }
 65 
 66 bool is_full(stack *s)
 67 {
 68     if(s == NULL)
 69     {
 70         return false;
 71     }
 72     return s->top == s->len;
 73 }
 74 
 75 int get_length(stack *s)
 76 {
 77     if(s == NULL)
 78     {
 79         return false;
 80     }
 81     return s->top;
 82 }
 83 
 84 
 85 elemtype get_top(stack *s,elemtype e)
 86 {
 87     if(s == NULL)
 88     {
 89         return false;
 90     }
 91     e = s->data[s->top-1];
 92     return e;
 93 
 94 }
 95 
 96 
 97 bool show(stack *s)
 98 {
 99     if(s == NULL)
100     {
101         return false;
102     }
103     for(int i = s->top-1 ;i>=0;i--)
104     {
105         printf("%d ",s->data[i]);
106     }
107     printf("\n");
108     return true;
109 }
110 
111 bool set_top(stack *s,elemtype e)
112 {
113     if(s == NULL)
114     {
115         return true;
116     }
117 
118     s->data [-- s->top] = e; 
119     return true ;
120 }