主题:用栈实现数组的逆序输出
feng109
[专家分:0] 发布于 2006-04-19 21:52:00
那位编程高手帮帮忙,编写一个用栈实现数组的逆序输出呀,要是数组.谢谢各位啦
回复列表 (共17个回复)
沙发
aa7472888 [专家分:70] 发布于 2006-04-19 22:11:00
栈也可以是虚拟的啊~
你数组放在那,不就是一个栈吗?只不过数组的地址为栈底了。
具体如下:
input:a[N];
K=1:N;
output:a[N-K];
end
我也是菜鸟,不知道这样可不可以。期待高手。
板凳
feng109 [专家分:0] 发布于 2006-04-19 22:44:00
能不能讲详细一点,我刚刚才接触这个程序,所以对编写程序很多都不懂
3 楼
flysun0311 [专家分:2040] 发布于 2006-04-19 22:44:00
麻烦一点就是让数组先进栈在退栈!
4 楼
中国台湾 [专家分:2140] 发布于 2006-04-20 09:25:00
#include"stdio.h"
#include"stdlib.h"
#define OK 1
#define ERROR 0
#define TURE 1
#define FALSE 0
#define M 10 /*M 可以自己调动*/
#define OVERFLOW -1
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType;
typedef int status;
typedef struct /* 定义一个栈 */
{
SElemType *base;
SElemType *top;
int stacksize;
} Stack;
status InitStack(Stack *S) /* 初始化栈 */
{
(*S).base = (SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
if ((*S).base == NULL)
{
printf(" out of memory ");
exit(OVERFLOW);
}
(*S).top = (*S).base;
(*S).stacksize = STACK_INIT_SIZE;
return OK;
}
status PushStack(Stack *S,SElemType e) /* 进栈操作 */
{
if (S->top - S->base >= S->stacksize)
{
S->base = (SElemType*)realloc( S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));
if (S->base==NULL)
{
printf(" out of memory ");
exit(OVERFLOW);
}
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*S->top++ = e;
return OK;
}
status PopStack(Stack *S,SElemType *e) /* 出栈操作 */
{
if (S->top == S->base)
return ERROR;
*e = *(--S->top); /* 这里不能掉* */
return OK;
}
status EmptyStack(Stack S) /* 判断栈是否为空 */
{
if (S.top == S.base)
return TURE;
return FALSE;
}
int main()
{
Stack S;
int e,a[10],i;
InitStack (&S);
for (i=0;i<M;i++) /* 数组末要输入一个0 结束符 */
scanf("%d",&a[i]);
printf("倒序之前的数组为:");
for (i=0;i<M-1;i++)
printf("%d ",a[i]);
printf("\n");
i=0;
while (a[i]!=0) /* 将数组中的元素压入栈中 */
{
PushStack(&S,a[i]);
i++;
}
printf("倒序之后的数组为:");
while (!EmptyStack(S)) /* 倒序输出数组中的元素 */
{
PopStack(&S,&e);
printf("%d ",e);
}
printf("\n");
system("pause");
return 0;
}
5 楼
aa7472888 [专家分:70] 发布于 2006-04-20 10:39:00
不错。不错。
向上楼学习!~
有个地方不明白:system("pause");
不知道中国台湾能不能解释下是什么意思啊。谢谢
6 楼
中国台湾 [专家分:2140] 发布于 2006-04-20 12:14:00
让系统停止一下 可以看到结果 如果不加 屏幕一闪 看不到结果
7 楼
feng109 [专家分:0] 发布于 2006-04-20 17:34:00
中国台湾,妳能不能编写二叉排序树呀!先谢谢啦
8 楼
lbm717ls [专家分:170] 发布于 2006-04-20 20:05:00
typedef int SElemType;
请问这句是什么意思啊?
9 楼
海上飞洪 [专家分:520] 发布于 2006-04-20 20:26:00
这题那么容易也要叫人写
10 楼
tmgirl [专家分:10] 发布于 2006-04-20 20:28:00
这么长的程序,看得我头晕呀
我来回复