棧(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 }