请帮我看一下这个入栈出栈的程序
下面是一个入栈出栈的程序,将字符串入栈并反序输出。请帮我解答有疑问的地方。
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
typedef char Item;
typedef struct stack
{
Item *top;
Item *save;
}Stack;
void CreateStack(Stack *p, int size);
void PushStack(Item item, Stack *p);
void ReverseShowStack(Item *item, Stack *p);
int main(void)
{
Stack A;
CreateStack(&A, 100);
char str[10];
char *p;
gets(str);
puts("the original string:");
puts(str);
for(p=str; *p!='\0'; p++)
{
PushStack(*p, &A);
}
for(p=str; *p!='\0'; p++)
{
ReverseShowStack(p, &A);
}
puts("in reverse order:");
puts(str);
return 0;
}
void CreateStack(Stack *p, int size)
{
p->save= (Item *)malloc(sizeof(Item) * size);
p->top = p->save+sizeof(Item)*size;
/*
能否用下面的程序
p->save= (Item *)malloc(sizeof(Item));//这里就是没有乘以size.
p->top = p->save+sizeof(Item)*size;
*/
}
void PushStack(Item item, Stack *p)
{
p->top--;
*(p->top) = item;
//p->top--; //我总觉得放到这样才是逻辑,但是结果却不是想要的结果,会有乱码出现。为什
// 要放在最上面呢?
}
void ReverseShowStack(Item *item, Stack *p)
{
(*item) = *(p->top);
(p->top)++;
}
{
p->save = (Item *)malloc(sizeof(Item) * size);
p->top = p->save+sizeof(Item)*size;
/* 能否用下面的程序
p->save = (Item *)malloc(sizeof(Item));//这里就是没有乘以size.
p->top = p->save+sizeof(Item)*size; */
}
>>>>当然不可以,不乘以size怎么能放下size个元素?
void PushStack(Item item, Stack *p)
{
p->top--;
*(p->top) = item;
// p->top--; //我总觉得放到这样才是逻辑,但是结果却不是想要的结果,会有乱码出现。为什 // 要放在最上面呢?
}
>>>对于一个长为10的栈,top初始化时指向stack[10],这是刚好越界的位置,必须先减再赋值。