数据结构:栈

  1 # include <stdio.h>
  2 # include <malloc.h>
  3 # include <stdlib.h>
  4 
  5 typedef struct Node  
  6 {
  7     int data;
  8     struct Node * pNext;
  9 }NODE, * PNODE;
 10 typedef struct Stack  
 11 {
 12     PNODE pTop;
 13     PNODE pBottom;
 14 }STACK, * PSTACK;
 15 
 16 void init(PSTACK pS);
 17 void push(PSTACK,int);
 18 void traverse(PSTACK);
 19 bool pop(PSTACK,int *);
 20 bool empty(PSTACK);
 21 void clear(PSTACK pS);
 22 
 23 int main(void)
 24 {
 25     STACK S;
 26     int val;
 27     
 28     init(&S);
 29     push(&S,1);
 30     push(&S,2);
 31     push(&S,3);
 32     push(&S,4);                
 33     push(&S,5);
 34     traverse(&S);
 35     
 36     if(pop(&S,&val))
 37     {    
 38         printf("出栈成功,出栈的元素是:%d\n",val);
 39     }
 40     else
 41     {
 42         printf("出栈失败");
 43         
 44     }
 45     
 46     traverse(&S);
 47     clear(&S);
 48     traverse(&S);
 49     
 50     return 0;
 51 }
 52 
 53 void init(PSTACK pS)  //初始化
 54 {
 55     pS->pTop = (PNODE)malloc(sizeof(NODE));
 56     if(NULL == pS->pTop)
 57     {
 58         printf("分配失败\n");
 59         exit(-1);
 60     }
 61     else
 62     {
 63         pS->pBottom = pS->pTop;
 64         pS->pTop->pNext = NULL; //也可以写成pS->pBottom->pNext = NULL;
 65     }
 66     
 67 }
 68 void push(PSTACK pS,int val)   //压栈
 69 {
 70     PNODE pNew  = (PNODE)malloc(sizeof(NODE));
 71     pNew->data  =  val;
 72     pNew->pNext = pS->pTop; //pS->pTop不能改成pS->pBottom;
 73     pS->pTop    = pNew;
 74     
 75 } 
 76 void traverse(PSTACK pS)   //遍历
 77 {
 78     PNODE p = pS->pTop;
 79     
 80     while (p != pS->pBottom)
 81     {
 82         printf("%d ",p->data);
 83         p =p->pNext;
 84     }
 85     printf("\n");
 86     return;
 87 }
 88 bool empty(PSTACK pS)   //判断是否为空
 89 {
 90     if(pS->pTop ==pS->pBottom)
 91         return true;
 92     else
 93         return false;
 94 }
 95 //把pS所指向的栈出栈一次,将元素pVal所指向的变量中
 96 bool pop(PSTACK pS,int * pVal)   //出栈
 97 {
 98     if(empty(pS))   //pS本身就是存放
 99     {
100         return false;
101     }
102     else
103     {
104         PNODE r = pS->pTop;
105         *pVal = r->data;
106         pS->pTop = r->pNext;
107         free(r);
108         r = NULL;
109         
110         return true;
111     }
112 }
113 
114 void clear(PSTACK pS)   //清空数据
115 {
116     if(empty(pS))
117     {
118         return;
119     }
120     else
121     {
122         PNODE p = pS->pTop;
123         PNODE q = NULL;
124         
125         while(p !=pS->pBottom)
126         {
127             q = p->pNext;
128             free(p);
129             p=q;
130         }
131         pS->pTop = pS->pBottom;
132     }
133     
134 }
135 /*
136 在VC++6.0中运行的结果为:
137 ==================================
138 5 4 3 2 1
139 出栈成功,出栈的元素是:5
140 4 3 2 1
141 
142 Press any key to continue
143 ==================================
144 */

posted on 2012-11-08 18:27  Your Song  阅读(166)  评论(0编辑  收藏  举报

导航