0
排序兩個堆疊有3個棧 - A,B,C通過使用結構
堆棧A和B被排序(在堆棧的頂部的數目是最大的)。堆棧C是空的,只有5操作被允許:
推, 流行, 頂部, is_empty, 創建
我們需要寫接收棧A和B的功能,在移動所有的號碼堆棧A和B堆棧C和堆棧C必須被排序(最大的數字在最上面)。
我的算法:
Compare top of A with top of B
Pop the least element and push to stack C
Repeat step 2 until any of the stack (A or B) becomes empty
Move remaining elements from non-empty stack to C. Now you have all the elements in C but in ascending order. (That is least element at top).
Move all the elements from C to A. (Contents in A are in descending order)
Move all the elements from A to B. (Contents in B are in ascending order)
Move all the elements from B to C.
,我開始寫代碼,但有錯誤,我不知道爲什麼!
代碼:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX_MEMBERS 10
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 (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)
{
while(!is_empty(&a)||!is_empty(&b))
if(top(&a)>top(&b))
push(&c,pop(&b));
if(!is_empty(&a))
{
while(!is_empty(&a))
push(&c,pop(&a));
}
else
{
while(!is_empty(&b))
push(&c,pop(&b));
}
while(!is_empty(&c))
push(&a,pop(&c));
while(!is_empty(&a))
push(&b,pop(&a));
while(!is_empty(&b))
push(&c,pop(&b));
}
void main(void)
{
STACK a,b,c;
create_stack(&a);
create_stack(&b);
create_stack(&c);
sort(&a,&b,&c);
}
但是,你在哪裏看到我所謂的 「頂部(一)」 如果我們假定 「A」是空的 ? –
我通過編輯回答了你的問題 – Machtl
對不起你可以編輯代碼,因爲我不明白它.. u能插入代碼和編譯代碼,而無需任何錯誤? –