PDA

View Full Version : Lỗi không pop được các giá trị trong 1 đoạn code cộng 2 số lớn dùng stack. Giúp mình sửa với?



QUOC HUNG
03-11-2011, 08:13 AM
Mình code đoạn đầu của stack cộng 2 số lớn dùng mảng nhưng mà chạy thì có lỗi, mình gặp rắc rối trong việc khai báo biến 'top' trong chương trình. Ae giúp mình sửa nó cái để push và pop đc các giá trị trong 2 mảng là 2 số nguyên. và đây là code của mình

#include <stdio.h>
#include <stdlib.h>
#define MAX 1000

typedef int eltype;
typedef eltype stacktype[MAX];
//int top;

void initialize(stacktype stack)
{
int top = 0;
}
int empty(stacktype stack)
{
int top;
return (top==0);
}
void push(eltype el, stacktype stack)
{
int top;
stack[top++] = el;
}

eltype pop(stacktype stack)
{
int top;
if(empty(stack))
{
printf("stack rong.\n");
return 0;
}
else
return stack[--top];
}
int main()
{

int top1=0, top2=0,top3=0;
int n1, n2, i;
eltype el;
stacktype stack1, stack2, stack3;
initialize(stack1);
initialize(stack2);
initialize(stack3);
printf("Nhap so chu so cua so hang thu 1: ");
scanf("%d", &n1);
printf("Nhap lan luot cac chu so cua so hang thu nhat: \n");
for (i = 0; i < n1; i++)
{
scanf("%d", &el);
push(el, stack1);
top1++;
}
printf("Nhap so chu so cua so hang thu 2: ");
scanf("%d", &n2);
printf("Nhap lan luot cac chu so cua so hang thu hai: \n");
for (i = 0; i < n2; i++)
{
scanf("%d", &el);
push(el, stack2);
top2++;
}
printf("So hang thu nhat la : ");
while(top1!=0)
{
printf("%d", pop(stack1));
}
printf("\nSo hang thu hai la : ");
while(top2!=0)
{
printf("%d", pop(stack2));
}
return 0;
}

fithou91192
03-11-2011, 09:04 AM
bạn có thể xem qua bài này


#include <stdio.h>
#include<conio.h>
#define MAX 100

int stack[MAX + 1];
int top;

void khoi_tao_stack()
{
top = -1;
}

int is_empty()
{
return (top == -1);
}

int is_full()
{
return (top == MAX);
}

int push(int value)
{
if (top < MAX)
stack[++top] = value;
return top;
}

int pop(int *value)
{
*value = stack[top--];
return top;
}

int main()
{
int k;

khoi_tao_stack();
printf("\nNhap cac phan tu vao stack (-1 de ket thuc) : ");
do {
scanf("%d", &k);
if (k != -1)
push(k);
} while (k != -1 && !is_full());
printf("\n\nLay cac phan tu tu stack ra : ");
while (!is_empty())
{
pop(&k);
printf("%d ", k);
}
getch();
}

clchicken
03-11-2011, 09:49 AM
@ QUOC HUNG : Nếu dùng mảng thì tức là Top về nguyên tắc sẽ ko là cái gì và độc lập với stack. Chả ai hiểu cái top này là cái gì và có bạn bè gì với stack ko :D , chẳng qua ta học thấy à, stack là có cái top vậy thôi :D
Với cả các biến khai báo trong hàm mà khi out hàm là byebye chúng luôn cho nên bạn có làm gì rồi Top nó vẫn vậy ah :D (biến top ấy:D)
----------------
Mình thấy bạn có ý định khai báo top là biến toàn cục :D . Ko nên làm vậy :D ,làm vậy vừa nguy hiểm lại chả hiệu quả, bởi vì nếu 1 hàm viết ra thì chỉ xài dc cho mỗi 1 stack mà ko xài dc cho stack khác :D.
----------------

Bây giờ ta muốn Top phụ thuộc stack thì hãy truyền Top ở dạng Tham chiếu vào các hàm . :D . Xử lý stack thế nào thì top nó sẽ thay đổi theo nấy :D.

Còn bạn muốn Top đi đôi với stack luôn thì nên định nghĩa 1 kiểu mới. trong đó có 2 trường : mảng (stack) và top :D . Vậy 2 cái này bây giờ đi với nhau như hình với bóng

QUOC HUNG
03-11-2011, 09:10 PM
Cảm ơn các bạn đã cho mình ý kiến nhé, vì mình mới học c basic nên còn lơ mơ lắm. (:=(|)