严蔚敏版《数据结构(C语言)》,中SElemType ElemType在哪儿有定义?

JunhaoYuan 2010-07-04 01:07:50
大家好,
最近学习C++,看到栈那节,在栈的定义中有一个数据类型是SElemType:
typedef stuct
{
SElemType* base;
SElemType* top;
int stacksize;
}SqStack;
,在栈的初始化中又用到了一个数据类型ElemType:
Status InitStack(SqStack& S)
{
S.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(ElemType))
.
.
.
}
可以看出来,这两个数据结构是在之前有过定义的,但是我实在是没有找到哪儿有定义,前面的十几页翻烂了都要。请哪位看过这书各位麻烦给指明一下,指个大概位置也行,大不了再翻烂它一遍。若有提示,将不胜感谢!
...全文
7764 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
八家铺子 2011-09-24
  • 打赏
  • 举报
回复
在书的第51页有SElemType的定义。。
JunhaoYuan 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 kindlucy 的回复:]
对栈的实现方式可以使用数组,在这种情况下,需要预定一定的存储空间,当栈满了以后,通常会申请一个更大的数组,然后把原来的数组复制到新的更大的数组中,这个过程会影响效率。如果申请不到更大的数组,应该就会报错了。
另一种实现可以考虑用链表,这样不需要预设存储空间的大小,每次push,就添加一个新的节点即可。
[/Quote]哦,这样就很清楚了,非常感谢。
kindlucy 2010-07-05
  • 打赏
  • 举报
回复
对栈的实现方式可以使用数组,在这种情况下,需要预定一定的存储空间,当栈满了以后,通常会申请一个更大的数组,然后把原来的数组复制到新的更大的数组中,这个过程会影响效率。如果申请不到更大的数组,应该就会报错了。
另一种实现可以考虑用链表,这样不需要预设存储空间的大小,每次push,就添加一个新的节点即可。
JunhaoYuan 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 haoshen1987 的回复:]
引用 10 楼 haoshen1987 的回复:

引用 9 楼 haoshen1987 的回复:

这只是一种通用的写法,表示任何数据类型。
你可以,比如:
#define ElemType int
or
#define ElemType char
and so on.

噢,一时头晕搞错了。
应该是:
typedef ElemType int;
typedef ……
[/Quote]呵,这个我倒是知道,我本身就是想知道这本书在哪儿有这么一个定义或者说明。
hua_zhixing_ 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 haoshen1987 的回复:]

引用 9 楼 haoshen1987 的回复:

这只是一种通用的写法,表示任何数据类型。
你可以,比如:
#define ElemType int
or
#define ElemType char
and so on.

噢,一时头晕搞错了。
应该是:
typedef ElemType int;
typedef ElemType char;
[/Quote]
Oh, god!是不是起得太早啊,还是搞错了。
typedef int ElemType;
typedef char ElemType;
hua_zhixing_ 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 haoshen1987 的回复:]

这只是一种通用的写法,表示任何数据类型。
你可以,比如:
#define ElemType int
or
#define ElemType char
and so on.
[/Quote]
噢,一时头晕搞错了。
应该是:
typedef ElemType int;
typedef ElemType char;
hua_zhixing_ 2010-07-05
  • 打赏
  • 举报
回复
这只是一种通用的写法,表示任何数据类型。
你可以,比如:
#define ElemType int
or
#define ElemType char
and so on.
JunhaoYuan 2010-07-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhzxlc_06 的回复:]
给你一个堆栈的实例程序
C/C++ code
/* 堆栈程序实例 */

#include <stdio.h>
#include <stdlib.h>

#define SIZE 50

void push(int i);
int pop(void);

int *tos,*p1,stack[SIZE];

int main(void)
{
int valu……
[/Quote]
这个栈的Push操作时,如果栈满,它并没有为栈再分配空间,这样应该不好。我在《数据结构》一书中,看老师给的Push对这种栈满的操作是再分配存储空间。我想问的问题就是,如果这个时候之前的栈空间后面没大有可用空间,栈的resize一直会报错吗?
JunhaoYuan 2010-07-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhzxlc_06 的回复:]
请看这本书的第10页最上面的那四行。这本书采用的代码是伪码或类C语言的描述工具!所以这本书的代码都不能在机器上运行的!
这里的ElemType是指数据的类型!
[/Quote]非常抱歉这么晚回你的消息,今天下等有些私事儿,出去了,才回来。也非常感谢你给的非常准确的证据,我已经能明白那个类型了。
JunhaoYuan 2010-07-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fancymouse 的回复:]
数据的类型。想往栈里丢啥东西这个就是啥类型咯。
[/Quote]另引发了我的另一个思考。在栈做Push操作的时候,如果栈满,而此时,原栈的数据区后面没有空闲空间(但内存依旧有空间),那么这时候申请是不是肯定失败呢?
如果是,我们编程怎么避免这样的问题?
如果不失败,那该怎么处理新加入空间后S.top++的问题(即,这个栈已经不是连续的空间了)?
期待回复……
JunhaoYuan 2010-07-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fancymouse 的回复:]
数据的类型。想往栈里丢啥东西这个就是啥类型咯。
[/Quote]这个回答之前在google上已经搜到。不过根据昨天自己写的一个栈结构,再一想,栈有点数组的意思,栈名类似于数组名,栈的内存空间类似于数组的数据空间。
这样的话,这个Init函数是不是有问题啊?是不是应该改成:S.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
另,非常感谢您的回复。
chaoliu1024 2010-07-04
  • 打赏
  • 举报
回复
注意push和pop操作。。。
chaoliu1024 2010-07-04
  • 打赏
  • 举报
回复
给你一个堆栈的实例程序
/* 堆栈程序实例 */

#include <stdio.h>
#include <stdlib.h>

#define SIZE 50

void push(int i);
int pop(void);

int *tos,*p1,stack[SIZE];

int main(void)
{
int value;

tos = stack; /* tos points to the top of stack */
p1 = stack; /* initialize p1 */
do{
printf("Enter value:");
scanf("%d",&value);
if(value!=0) push(value);
else printf("value on top is %d\n",pop());
}while(value!=-1);

return 0;
}

void push(int i)
{
p1++;
if(p1==(tos+SIZE)){
printf("Stack Overflow.\n");
exit(1);
}
*p1 = i;
}

int pop(void)
{
if(p1==tos){
printf("Stack Underflow.\n");
exit(1);
}
p1--;
return *(p1+1);
}
chaoliu1024 2010-07-04
  • 打赏
  • 举报
回复 1
请看这本书的第10页最上面的那四行。这本书采用的代码是伪码或类C语言的描述工具!所以这本书的代码都不能在机器上运行的!
这里的ElemType是指数据的类型!
FancyMouse 2010-07-04
  • 打赏
  • 举报
回复
数据的类型。想往栈里丢啥东西这个就是啥类型咯。

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧