有3个堆栈-A、B、C
堆栈A和B被排序(堆栈顶部的数字最大)。堆栈C为空,仅允许5次操作:
推,弹出,顶,is_empty,创建
我们需要编写一个函数来接收堆栈A和B,将堆栈A和B中的所有数字移动到堆栈C,堆栈C必须排序(最大数字在顶部)。
我有算法:
比较A的顶部和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 8
typedef struct
{
int x[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;
}
int pop(STACK *s)
{
return s->x[s->top--];
}
void push(STACK *s,int item)
{
s->x[++s->top]=item;
}
int top(STACK *s)
{
return s->x[s->top];
}
void ex1(STACK *a, STACK *b)
{
STACK c;
while(!is_empty(a)&&!is_empty(b))
{
if(top(&a)>top(&b))
push(&c,pop(&a));
else if(top(&a)<top(&b))
push(&c,pop(&b));
else
{
pop(&a);
push(&c,pop(&b));
}
}
if(is_empty(&a))
while(!is_empty(&b))
push(&c,pop(&b));
else while(!is_empty(&a))
push(&c,pop(&a));
while(!is_empty(&c))
push(&a,pop(&c));
while(!is_empty(&a))
push(&b,pop(&a));
while(!is_empty(&b))
push(&c,pop(&b));
}
main()
{
STACK a,b;
int i,x;
create_stack(&a);
create_stack(&b);
for(i=0;i<4;i++)
{
printf("enter a num for stack a :\n");
scanf("%d",&x);
push(&a,x);
printf("enter a num for stack b :\n");
scanf("%d",&x);
push(&b,x);
}
ex1(a,b);
}
有一堆错误,其中许多归结为推送
签名:
void push(STACK s,int item)
看起来应该是:
void push(STACK *s,int item)
剩下的问题归结为不将堆栈
结构的地址传递给函数,例如:
push(a,x);
应该是:
push(&a,x);
另外,main
应始终返回int
:
int main()
有3个堆栈-A、B、C 堆栈A和B被排序(堆栈顶部的数字最大)。堆栈C为空,仅允许5次操作: 推,弹出,顶,is_empty,创建 我们需要编写一个函数来接收堆栈A和B,将堆栈A和B中的所有数字移动到堆栈C,堆栈C必须排序(最大数字在顶部)。 我有算法: 比较A的顶部和B的顶部 我开始写代码,但有错误,我不知道为什么! 代码:
我试图理解使用中给出的递归对堆栈元素进行排序http://www.geeksforgeeks.org/sort-a-stack-using-recursion/不允许使用while、for…等任何循环结构。我们只能在堆栈S上使用以下ADT函数: is_empty(S):测试堆栈是否为空。 push(S) :向堆栈添加新元素。 Pop(S):从堆栈中删除顶部元素。 top(S) :返回 top 元素
输入=堆栈数 但是你只能弹出输入,你不能推到它。输出也是另一个堆栈,你可以返回并推到它,但不能弹出 所以如果 由于您无法在中返回到
以下是完整的问题: 编写一个java方法,它将接受两个排序后的堆栈a和B(最小值在顶部),并返回一个排序后的堆栈D(最小值在顶部)。只允许使用堆栈操作,如pop、push、isEmpty和peek。 示例:假设A={(top)1,4,7,9}和B={(top)2,3,6},那么函数将返回一个新的堆栈D={(top)1,2,3,4,6,7,9} 我写的代码是这样的: 你怎么认为?
我已经在Java和C中找到了这个问题的几个实现,但我还没有找到一个使用JavaScript的示例。这是一个相当常见的技术面试问题: 在2n空间中对堆栈进行排序。(仅使用2个堆栈对堆栈进行排序)
在这个程序中,我必须打开一个文件并将其打印到文本区域,然后确保所有括号、括号等匹配。如果括号匹配,我将在另一个文本区域中打印出来。我的问题如下:我是从文件中读取还是从第一个文本区域读取?我是在Actionlistener还是在构造函数中创建堆栈?