打印

关于栈的问题

[复制链接]
845|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gxgclg|  楼主 | 2012-5-22 21:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1 #include<stdio.h>
2 #include<stdlib.h>
3 #define MAXSIZE 100
4 #define OK 1
5 #define ERROR 0
6 typedef int SElemType;
7 typedef int Status;
8 typedef struct
9 {
10 SElemType data[MAXSIZE];
11 int top;
12 }SqStack;
13 SqStack InitSqstack()
14 {
15 SqStack S;
16 S.top=-1;
17 return S;
18 }
19 Status Push(SqStack S,SElemType e)
20 {
21 if(S.top==MAXSIZE-1) { return ERROR; }
22 S.top++;
23 S.data[S.top]=e;
24
25 return OK;
26
27 }
28 Status Pop(SqStack S,SElemType *e)
29 {
30 if(S.top==-1) {return ERROR;}
31
32 *e=S.data[S.top];
33 S.top--;
34
35 return OK;
36 }
37 Status PrintSqStack(SqStack S)
38 {
39 int i;
40 for(i=0;i<=S.top;i++)
41 printf("%d",S.data[i]);
42
43 return OK;
44 }
45 void main()
46 {
47 SqStack s;
48 s=InitSqStack();
49 int *x;
50 InitSqStack(s);
51 Push(s,1);
52 Push(s,2);
53 Push(s,3);
54 Push(s,4);
55 PrintSqStack(s);
56 Pop(s,x);
57 PrintSqStack(s);
58 }
~


错误原因:moudle.c: 在函数‘main’中:
moudle.c:48:5: 错误: 将‘int’赋值给‘SqStack’时类型不兼容
还有一个问题问什么将.操作换为->操作,会提示->类型无效,因为有SqStack
还有当参数为 (SqStack &S)(SqStack *S)该怎么改,&的用法为什么会报错,编译器是gcc

相关帖子

沙发
yybj| | 2012-5-22 21:45 | 只看该作者
你写的代码很有问题,一些公司典型面试改错题就是你这种,
首先你的InitSqstack()函数里申明了一个SqStack类型的对象,这个对象里包含了一个数组,你要知道数组就是指针,当调用s=InitSqStack(),你的s的data数组的值其实就是函数返回的临时对象的data的指针,一旦函数调用结束,这个临时对象析构,数组空间释放,而你main里的s的data仍然指向已经原来被析构过的地方,你这个指针就沦为野指针,这是非常危险的。
.操作前面是对象
->操作前面是指针
SqStack &S改成SqStack *S的话就是把函数里.改成->
同属参数要改成指针类型的

使用特权

评论回复
板凳
xsgy123| | 2012-5-23 14:28 | 只看该作者
LS分析的很透彻

使用特权

评论回复
地板
火箭球迷| | 2012-5-23 14:37 | 只看该作者
很典型的一道栈相关的题目

使用特权

评论回复
5
shenmu2012| | 2012-5-23 17:01 | 只看该作者
学习下了,栈在程序当中的低位是非常重要的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

1653

帖子

1

粉丝