可變長順序棧

棧(stack)你們必定不陌生,限定僅在表尾進行插入和刪除操做的線性表。數組

理解棧,首先要理解棧是線性表的特例,只是操做受限制了;棧的順序存儲結構也是線性表順序存儲的簡化,對於棧這一種只能一頭插入刪除的線性表來講,咱們能夠用數組實現它,可是數組的大小是給定的,若是你想存儲的元素個數多於數組的個數,這時候天然而然就想到了動態開闢堆空間,手動申請手動釋放……函數

     本身寫了一點函數實……不對的地方望大神給予改正spa

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 }
相關文章
相關標籤/搜索