鱼C论坛

 找回密码
 立即注册
查看: 3658|回复: 6

栈的top--不起作用

[复制链接]
发表于 2013-6-8 23:10:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我在退栈函数pop()中写了top--使栈中元素逐一输出,但是没有效果,只能输出栈顶第一个元素(例如栈顶是1,他就永远输出1)


求高手帮我看看

#include<stdio.h>
#include<stdlib.h>
#define MAX 100
typedef struct tree
{
int data[MAX];
int last;
}wtree;
typedef struct
{
    int data[MAX];
int top;
}stack;//栈结构
stack Nstack()
{
stack N;
N.top=0;
N.data[N.top]=0;
return N;
}
stack push(stack N,int x)
{
N.top++;
N.data[N.top]=x;
return N;
}
int pop(stack N)
{
int x;
x=N.data[N.top];
N.top--;
return x;
}
wtree createtree()
{
wtree T;
T.last=0;
return T;
}
void deal(wtree T)
{   stack N=Nstack();
int i=1;
while(T.data[i]!=0)
{
  if(T.data[2*i+1]!=0)
   i=2*i+1;
  else if(T.data[2*i]!=0)
   i=2*i;
  else
  {
   N=push(N,T.data[i]);
   T.data[i]=0;
   i=i/2;
  }
}
while(N.top!=0)
{printf("%d\t",pop(N));
}
}

   
void main()
{   wtree T=createtree();
int i=0,j=1,x;
scanf("%d",&x);
T.last=2*x+1;
while(i<=T.last)
{T.data[i]=0;
i++;}
while(j<=x)
{scanf("%d",&T.data[j]);
j++;}
    deal(T);
}

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-9 00:46:04 | 显示全部楼层
无回帖,不论坛,这才是人道。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-9 13:09:13 | 显示全部楼层
这代码格式。。。真心不愿看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-10 00:45:40 | 显示全部楼层
本帖最后由 fanki 于 2013-6-10 00:53 编辑

你是不是想这样吖?我只帮你改了改pop的函数

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

  3. #define MAX 100
  4. typedef struct tree
  5. {
  6.         int data[MAX];
  7.         int last;
  8. }wtree;

  9. typedef struct
  10. {
  11.     int data[MAX];
  12.         int top;
  13. }stack;//栈结构

  14. stack Nstack()
  15. {
  16.         stack N;
  17.         //初始化的话,stack N = { 0 };//这样会不会好一点呢?
  18.         N.top = 0;
  19.         N.data[N.top] = 0;
  20.         return N;
  21. }

  22. //入栈   这个函数你是通过返回值去回结构体,所以不用传指针
  23. stack push(stack N,int x)
  24. {
  25.         N.top++;
  26.         N.data[N.top] = x;
  27.         return N;
  28. }

  29. //出栈   这里如果不用指针的话,函数属于值传递,本来的值不会改变,就会导致pop没有拿出来而死循环
  30. int pop(stack* N)
  31. {
  32.         int x;
  33.         x = N->data[N->top];
  34.         N->top--;
  35.         return x;
  36. }

  37. wtree createtree()
  38. {
  39.         wtree T = { 0 };
  40.         T.last = 0;
  41.         return T;
  42. }

  43. void deal( wtree T )
  44. {   
  45.         stack N = Nstack();
  46.         int i = 1;
  47.         while( T.data[i] !=0 )
  48.         {
  49.                 if( T.data[2*i+1] != 0 )
  50.                         i = 2 * i + 1;
  51.                 else if( T.data[2*i] != 0 )
  52.                         i = 2 * i;
  53.                 else
  54.                 {
  55.                         N = push( N, T.data[i] );
  56.                         T.data[i] = 0;
  57.                         i = i / 2;
  58.                 }
  59.         }
  60.         while( N.top != 0 )
  61.         {
  62.                 //pop这里传stack的地址,就可以改变它的值。
  63.                 printf( "%d\t", pop( &N ) );
  64.         }
  65. }

  66. void main()
  67. {   
  68.         wtree T = createtree();
  69.         int i = 0, j = 1, x;
  70.         printf( "please input how many member:");
  71.         scanf("%d", &x);
  72.         T.last = 2 * x + 1;
  73.         while( i <= T.last )
  74.         {
  75.                 T.data[i] = 0;
  76.                 i++;
  77.         }
  78.         while( j <= x )
  79.         {
  80.                 scanf( "%d", &T.data[j] );
  81.                 j++;
  82.         }
  83.         deal(T);
  84. }
复制代码


希望对你有帮助,一起学习,加油加油。{:7_155:}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-12 11:47:45 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-12 12:22:40 | 显示全部楼层
小彭彭 发表于 2013-6-12 11:47
就是这个,感动!!!

{:7_175:}一起学习啦。加油吖~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-14 19:22:04 | 显示全部楼层
不懂,求教
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-24 11:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表