数据结构顺序栈的定义问题

#defineStackSize100typedefcharDataType;typedefstruct{DataTypedata[StackSize];inttop;}... #define StackSize 100
typedef char DataType;
typedef struct
{ DataType data[StackSize];
int top;
}SeqStack;
我们课本上写的是
#define STACK_INIT_SIZE 100;
#define stackincrement 10;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}sqstack;
求详细解释。
展开
 我来答
r1renhw
推荐于2017-09-01 · TA获得超过1577个赞
知道小有建树答主
回答量:810
采纳率:100%
帮助的人:422万
展开全部
/*
你看看这个例子吧
*/
# include "stdio.h"
# include "stdlib.h"
# define STACK_INIT_SIZE 10/*存储空间初始分配量,为了突出stackincrement有用
此处改小点为10(没有分号)*/
# define stackincrement 10/*存储空间分配增量,因为是顺序存储结构
一次分配固定的内存,本题是100个,而不是
动态分配存储空间,所以需要定义一个增量*/
typedef int SElemType;
typedef struct
{
SElemType *base;//栈底指针,栈构造之前和销毁之后,其值为NULL
SElemType *top;//栈顶指针
int stacksize;//当前已经分配的存储空间,以元素为单位
}SqStack;
void print(SElemType c)
{
printf("%d ",c);
}
//构造一个空栈S
void InitStack(SqStack * S)
{
if (! ((* S).base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType))))//一次分配10个int类型的空间
{
exit(-1);
}
(* S).top = (* S).base;
(* S).stacksize = STACK_INIT_SIZE;
}

//将元素e插入栈顶
void Push(SqStack * S,SElemType e)
{
if ((* S).top-(* S).base >= (* S).stacksize)//栈满,利用realloc增加存储空间每次增加stackincrement个int类型空间
{
(* S).base = (SElemType *)realloc((* S).base,((* S).stacksize+stackincrement)*sizeof(SElemType));
if (!(* S).base)
{
exit (-1);
}
(* S).top = (* S).base + (* S).stacksize;
(* S).stacksize = (* S).stacksize + stackincrement;
}
*((* S).top)++ = e;
}
//从栈底到栈顶依次对栈中每个元素调用函数visit
void StackTraverse(SqStack S,void (* visit)(SElemType))
{
while (S.top > S.base)
{
visit(*(S.base)++);
}
printf("\n");
}
int main(void)
{
int j;
SqStack s;
SElemType e;
InitStack(&s);
printf("初始化后栈s的空间为%d\n",s.stacksize);
for (j=1; j<=12; ++j)
{
Push(&s,j);
}
printf("操作完后,栈s的空间为%d\n",s.stacksize);/*第一次只分配了10个空间
但需要压入12个元素
所以需要增加stacksize个*/
printf("栈中的元素为:");
StackTraverse(s,print);
return 0;
}
/*
在vc++6.0中的输出结果:
------------------------
初始化后栈s的空间为10
操作完后,栈s的空间为20
栈中的元素为:1 2 3 4 5 6 7 8 9 10 11 12
------------------------------
*/
巽心猿
2012-10-12 · TA获得超过202个赞
知道答主
回答量:119
采纳率:0%
帮助的人:54.9万
展开全部
#define STACK_INIT_SIZE 100;//宏定义常量
#define stackincrement 10;//同上
typedef struct//结构体
{
SElemType *base;//
SElemType *top;//头
int stacksize;//数据
}sqstack;//名字
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
傲世修罗王
2012-10-12 · TA获得超过1085个赞
知道小有建树答主
回答量:1034
采纳率:0%
帮助的人:741万
展开全部
解释什么?把你不明白的地方说出来。我发现很多人连基本的问问题都成问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式