關於堆疊



贊助商連結


流浪者~MIT
2002-11-16, 11:42 AM
使用堆疊,題目為依序輸入name,age,salary最多為五筆超過顯示stack full,沒有資料顯示empty
我寫ㄉ程式大約如下,但是我輸入name取出時都會顯示亂碼,有人可以幫我改改程式ㄇ??~~謝謝
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define max_size 5
char mystack[max_size];
int mytop=-1;

struct person {
char name[20];
int age;
float salary;
};
struct person x;

void add(int *top,char value)
{
if (*top>=max_size-1) {
printf("stack full");
return;
}
mystack[++*top]=value;
}
char delete1(int *tt)
{
if(*tt==-1) {
printf("stack empty");
return 0;
}
return mystack[(*tt)--];
}
void main()
{
char sel;
char item;
char ch;
clrscr();
for(;;) {
printf("\n(a)add (b)delete (c)quit");
sel=getche();
switch (sel) {
case ''a'':
printf("\ninput name:");
gets(&x.name);
add(&mytop,x.name);
break;
case ''b'':
ch=delete1(&mytop);
printf("\noutput data is:%s\n",ch);
break;
case ''c'':
exit(0);
break;
}
}
}

贊助商連結


xbug
2002-11-18, 02:01 PM
試試看這樣.. 可以符合你想做到的功能.
but~ stack 不是這樣動作的, 打從一開始你的程式流程就不對了~



#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

#define max_size 5

char *mystack[max_size];
int mytop=-1;

struct person {
char name[20];
int age;
float salary;
};
struct person x;

void add(int *top,char *value)
{
if (*top>=max_size-1) {
printf("\nstack full");
return;
}

(*top)++;
mystack[*top] = new char[strlen(value)+1];
strcpy(mystack[*top], value);
}

char* delete1(int *tt)
{
if(*tt==-1) {
printf("\nstack empty");
return 0;
}
printf("\noutput data is:%s\n", mystack[*tt]);
delete [] mystack[*tt];
return mystack[(*tt)--];
}

void main()
{
char sel;
char item;

clrscr();
for( ; ; ) {
printf("\n(a)add (b)delete (c)quit:");
sel=getche();
switch (sel) {
case 'a':
printf("\ninput name:");
gets(x.name);
add(&mytop,x.name);
break;
case 'b':
delete1(&mytop);
break;
case 'c':
exit(0);
break;
}
}
}

流浪者~MIT
2002-11-18, 07:53 PM
最初由 xbug 發表
試試看這樣.. 可以符合你想做到的功能.
but~ stack 不是這樣動作的, 打從一開始你的程式流程就不對了~

[CODE]
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

#define ...
謝謝你
不過我還要同時輸入年紀跟薪水
請問該如何加進去ㄋ??

流浪者~MIT
2002-11-19, 05:18 PM
謝謝你
不過我還要同時輸入年紀跟薪水
請問該如何加進去ㄋ??