数据结构——栈的基本操作

数据结构——栈的基本操作

复制代码
  /*
  对栈实现初始化,插入栈顶元素,删除栈顶元素,遍历栈,清空栈等基本操作
  */
  1 #include <stdio.h>
  2 #include <malloc.h>
  3 #include <stdlib.h>
  4 
  5 #define true 1
  6 #define false 0
  7 
  8 
  9 typedef struct Node
 10 {
 11     int data;
 12     struct Node *pNext;
 13 }NODE, *PNODE;
 14 
 15 typedef struct Stack
 16 {
 17     PNODE pTop;
 18     PNODE pBottom;
 19 }STACK, *PSTACK;
 20 
 21 void init(PSTACK pS);
 22 void push(PSTACK pS, int val);
 23 void traverse(PSTACK pS);
 24 int pop(PSTACK pS , int *val);
 25 void clear(PSTACK pS);
 26 int empty(PSTACK pS);
 27 
 28 int main(void)
 29 {
 30     STACK S ;
 31     int val;
 32     int i;
 33     
 34     init(&S);
 35     
 36     push(&S,1);
 37     push(&S,2);
 38     push(&S,3);
 39     push(&S,4);
 40     push(&S,5);
 41     push(&S,6);
 42 
 43     traverse(&S);
 44     
 45     if(pop(&S ,&val))
 46     {
 47         printf("遍历成功,出栈元素为%d\n",val);
 48     }
 49     else
 50     {
 51         printf("出栈失败!\n");
 52     }
 53     traverse(&S);
 54 
 55     clear(&S);
 56     
 57     traverse(&S);
 58     
 59     return 0 ;
 60 }
 61 
 62 //栈的初始化
 63 void init(PSTACK pS)
 64 {
 65     pS -> pTop = (PNODE)malloc(sizeof(NODE));
 66     
 67     if(NULL == pS -> pTop)
 68     {
 69         printf("动态内存分配失败!");
 70         exit(-1);
 71     }
 72     else
 73     {
 74         pS -> pBottom = pS -> pTop;
 75         pS -> pTop -> pNext = NULL;
 76     }
 77     
 78     return ;
 79 }
 80 
 81 //插入元素到栈顶
 82 void push(PSTACK pS , int val)
 83 {
 84     PNODE pNew = (PNODE)malloc(sizeof(NODE));
 85     
 86     pNew -> data = val;
 87     pNew -> pNext = pS -> pTop;
 88     pS -> pTop = pNew;
 89     
 90     return ;
 91 }
 92 
 93 //遍历栈S
 94 void traverse(PSTACK pS)
 95 {
 96     PNODE p = pS -> pTop;
 97     
 98     printf("栈内元素为:");
 99     while(p != pS -> pBottom)
100     {
101         printf("%d\t", p -> data);
102         p = p -> pNext;
103     }
104     
105     printf("\n");
106     return ;
107 }
108 
109 //判断栈是否为空
110 int empty(PSTACK pS)
111 {
112     if(pS -> pTop == pS -> pBottom)
113     {
114         return true;
115     }
116     else
117         return false;
118 }
119 
120 //删除栈顶元素并将其值赋给*val
121 int pop(PSTACK pS , int *val)
122 {
123     if(empty(pS))
124     {
125         return false;
126     }
127     else
128     {
129         PNODE r = pS -> pTop;
130         *val = r -> data;
131         pS -> pTop = r -> pNext;
132         free(r);
133         r = NULL;
134     }
135 }
136 
137 //清空栈S
138 void clear(PSTACK pS)
139 {
140     if(empty(pS))
141     {
142         return;
143     }
144     else
145     {
146         PNODE p = pS -> pTop;
147         PNODE q = NULL;
148         
149         while(p != pS -> pBottom)
150         {
151             q = p -> pNext;
152             free(p);
153             p = q ;
154         }
155         
156         pS -> pTop = pS -> pBottom;
157         
158         return;
159     }
160 }
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值