栈的链表实现

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 typedef int datatype;
  4 typedef struct stack_linked
  5 {
  6     int data;
  7     struct stack_linked * next;
  8 }slinked,*slinked_p;
  9 slinked_p stack_creat();
 10 int stack_push(slinked_p S,datatype value);
 11 int stack_empty(slinked_p S);
 12 datatype stack_pop(slinked_p S);
 13 int stack_pop1(slinked_p S,datatype *value);
 14 int stack_top(slinked_p S);
 15 void stack_clear(slinked_p S);
 16 void stack_clear(slinked_p S);
 17 void stack_free(slinked_p S);
 18 int main(int argc, const char *argv[])
 19 {
 20     int value;
 21     slinked_p S = stack_creat();
 22     if(NULL == S)
 23     {
 24         printf("函数调用失败\n");
 25         return -1;
 26     }
 27     stack_push(S,1);
 28     stack_push(S,2);
 29     stack_push(S,3);
 30     stack_push(S,4);
 31     //printf("top = %d\n",stack_pop(S));
 32     stack_pop1(S,&value);
 33     printf("pop = %d\n",value);
 34     printf("top = %d\n",stack_top(S));
 35     stack_clear(S);
 36     stack_free(S);
 37     return 0;
 38 }
 39 
 40 slinked_p stack_creat()
 41 {
 42     slinked_p S = (slinked_p)malloc(sizeof(slinked));
 43     if(S == NULL)
 44     {
 45         printf("空间开辟失败\n");
 46         return NULL;
 47     }
 48     S->next = NULL;
 49     return S;
 50 }
 51 
 52 int stack_push(slinked_p S,datatype value)
 53 {
 54     slinked_p p = (slinked_p)malloc(sizeof(slinked));
 55     if(NULL == p)
 56     {
 57         printf("内存空间开辟失败\n");
 58         return -1;
 59     }
 60     p->next = S->next;
 61     S->next = p;
 62     p->data = value;
 63     return 0;
 64 }
 65 
 66 datatype stack_pop(slinked_p S)
 67 {
 68     if(stack_empty(S))
 69     {
 70         printf("栈空间为空\n");
 71         return -1;
 72     }
 73     slinked_p p = S->next;
 74     int value = p->data;
 75     S->next = p->next;
 76     free(p);
 77     p = NULL;
 78     return value;
 79 }
 80 int stack_empty(slinked_p S)
 81 {
 82     return S->next == NULL?1:0;
 83 }
 84 
 85 int stack_pop1(slinked_p S,datatype *value)
 86 {
 87     if(stack_empty(S))
 88     {
 89         printf("栈空间为空\n");
 90         return -1;
 91     }
 92     slinked_p p = S->next;
 93     *value = p->data;
 94     S->next = p->next;
 95     free(p);
 96     p = NULL;
 97     return 0;
 98 }
 99 //取栈顶元素
100 int stack_top(slinked_p S)
101 {
102     return S->next->data;
103 }
104 
105 //清空栈
106 void stack_clear(slinked_p S)
107 {
108     while(!stack_empty(S))
109     {
110         printf("%d ",stack_pop(S));
111     }
112     putchar(10);
113 }
114 
115 //free栈
116 
117 void stack_free(slinked_p S)
118 {
119     stack_clear(S);
120     free(S);
121     S = NULL;
122 }

 

posted on 2019-04-17 16:50  骉赑  阅读(85)  评论(0编辑  收藏  举报

导航