【问题标题】:No Input while sorting a stack对堆栈进行排序时没有输入
【发布时间】:2013-05-20 22:27:57
【问题描述】:

有 3 个堆栈 - A、B、C

堆栈 A 和 B 已排序(堆栈顶部的数字最大)。 Stack C is Empty 只允许 5 次操作:

推送、弹出、顶部、is_empty、创建

我们需要编写一个函数来接收栈 A 和 B,将栈 A 和 B 中的所有数字移动到栈 C 并且必须对栈 C 进行排序(最大的数字在顶部)。

我有算法:

>

Compare top of A with top of B

弹出最少元素并压入栈C

重复步骤 2,直到任何堆栈(A 或 B)变为空

将剩余的元素从非空栈移到 C。现在你有了 C 中的所有元素,但按升序排列。 (这是顶部的最少元素)。

将所有元素从C移动到A。(A中的内容按降序排列)

将所有元素从A移动到B。(B中的内容按升序排列)

将所有元素从 B 移动到 C。

这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX_MEMBERS 4
typedef struct
{
    int num;
}ITEM;

typedef struct
{
    ITEM a[MAX_MEMBERS];
    int top;
  } STACK;

void create_stack(STACK *s)
{
    s->top=-1;
}

int is_empty(STACK *s)
{
return s->top==-1;
}

 int is_full(STACK *s)
{
return s->top==MAX_MEMBERS-1;
}

ITEM pop(STACK *s)
{
    return s->a[s->top--];
}

void push(STACK *s,ITEM *item)
{
    s->a[++s->top]=*item;
}

ITEM top(STACK *s)
{
    return s->a[s->top];
}



void sort (STACK *a,STACK *b,STACK *c)
{
int i;
    ITEM y,x;
    while(!is_empty(a)||!is_empty(b))
    {

y=top(a);
x=top(b);

  if(&y>&x)
   {
    push(c,&x);
    pop(b);
   }
  else
    {
     push(c,&y);
         pop(a);

    }
}
if(!is_empty(a))
{
while(!is_empty(a))
x=pop(a);
push(c,&x);
}

else
while(!is_empty(b))
{
x=pop(b);
push(c,&x);
}

while(!is_empty(c))
{
x=pop(c);
push(a,&x);
}

while(!is_empty(a))
{
x=pop(a);
push(b,&x);
}

while(!is_empty(b))
{
x=pop(b);
push(c,&x);
}

for(i=0;i<MAX_MEMBERS-1;i++)
printf("%d",c->a[i]);
}

void main(void)
{
 int i;
STACK a,b,c;
ITEM x;
create_stack(&a);
create_stack(&b);
create_stack(&c);

 for(i=0;i<4;i++)
 {
printf("\nEnter a number to insert for A: ");
scanf("%d",&x.num);
push(&a,&x);
 }

 for(i=0;i<4;i++)
 {
printf("\nEnter a number to insert for B: ");
scanf("%d",&x.num);
push(&b,&x);
 }

    sort(&a,&b,&c);

}

我调试了代码,发现问题出在哪里.. 它在这里: if(&y>&x) 它总是为这个布尔条件给出一个“真”值.. 即使当 x

【问题讨论】:

    标签: arrays sorting struct stack


    【解决方案1】:

    因为你比较的是变量的地址,而不是变量本身

    【讨论】:

    • 以及如何比较变量的值?
    • 删除 & 符号。
    猜你喜欢
    • 2021-09-03
    • 2021-11-02
    • 2011-12-08
    • 1970-01-01
    • 2015-01-14
    • 2011-06-17
    • 2019-05-05
    • 2020-12-04
    • 2015-08-05
    相关资源
    最近更新 更多