我的计算机成长之路----栈

                             本人有点关于数据结构的几个问题:请大家指教:::

   栈(听说是最好写的一个程序)不过还是错误百出!!! 

   一开始写栈时,错误老多,改了好几次终于改好了,不过还是有点不懂的地方:

   一个栈的程序 《1》《2》《3》处不懂 程序中已表明    程序代码如下:

 

  
  
1 #include < stdio.h >
2 #include < stdlib.h >
3   #define SIZE 5
4
5 typedef struct {
6 int data[SIZE];
7 int top;
8 }snode;
9 snode * s;
10
11 void initstack(snode *& s) // 加 ‘* ’? 《1》
12 {
13 s = (snode * )malloc( sizeof (SIZE));
14 s -> top =- 1 ;
15 }
16 int empty(snode *& s) // * 必加
17 {
18 if (s -> top ==- 1 )
19 return 1 ;
20 else return 0 ;
21 }
22
23 int push(snode *& s, int e)
24 {
25 if (s -> top == SIZE - 1 ) {printf( " 栈已满,请重新分配空间/n " ); return 0 ;} // 必须家括号,if只执行一句;
26 else
27 {
28 s -> top ++ ;
29 s -> data[s -> top] = e;
30 return 1 ;
31 }
32 }
33
34 int pop(snode *& s, int & e)
35 {
36 if (s -> top ==- 1 ) {printf( " 栈空/n " ); return 0 ;}
37 else {
38 e = s -> data[s -> top];
39 s -> top -- ;
40 return e;
41 }
42 }
43
44 int gettop(snode *& s, int & e)
45 {
46 if (s -> top ==- 1 ) {printf( " zhan kong " ); return 0 ;}
47 else {
48 e = s -> data[s -> top];
49 return e;
50 }
51 }
52
53 void menu()
54 {
55 printf( " 1. 入栈 2.出栈 3.取栈顶元素/n " );
56 printf( " -----------------------------/n " );
57 }
58
59 int main()
60 {
61
62 initstack(s);
63 menu();
64 int i;
65 while (scanf( " %d " , & i) && i != 0 )
66 {
67 switch (i)
68 {
69 case 1 :{
70 printf( " 入栈/n " );
71 int a;
72 scanf( " %d " , & a);
73 int n;
74 n = push(s,a);
75 if (n == 0 ) {printf( " 栈满/n " ); menu();} // 为什会是六个元素?怎么修改? 《2》
76 else menu();
77 } break ;
78 case 2 :{
79 printf( " 出栈/n " );
80 if (s -> top ==- 1 ) // 为什么会用到s->top,s->top 为什么能直接用? 《3》
81 {
82 printf( " 栈空 error/n " );
83 menu();
84 }
85 else {
86 int e;
87 e = pop(s,e);
88 printf( " %d/n " ,e);
89 menu();
90 } break ;
91 }
92 case 3 :{
93 printf( " 取栈顶元素/n " );
94 int b;
95 b = gettop(s,b);
96 printf( " %d/n " ,b);
97 menu();
98 } break ;
99 }
100 }
101 system( " pasue " );
102 return 0 ;
103 }

 
                     《》 *********||||| 问题求教区|||||********《》
                ----------------------------------------------------------------
                         ***《1》《2》《3》处请教大家?
                         ***《1》《2》《3》处请教大家?
                         ***《1》《2》《3》处请教大家?
                         ***《1》《2》《3》处请教大家?
                         ***《1》《2》《3》处请教大家?

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值