我目前正试图做一个简单的堆栈菜单程序,将推动和弹出用户输入的值。 (也打印出堆栈)。堆栈将不会存储在C的价值
这是我迄今为止的代码。当我尝试插入一个值(情况1)时,我认为它有效 - 但我不确定,因为当我尝试打印出堆栈时(情况3),它总是说“堆栈为空!”。当我尝试弹出堆栈时(情况2),它只是崩溃。
我不知道我的一个结构是否关闭,或者我的指针是不正确的。
感谢您提前给予您的帮助,我非常抱歉乱码 - 我对此仍然很陌生!
#include<stdio.h>
#include<stdlib.h>
#define EMPTY 0
struct node
{
int data;
struct node *link;
};
typedef struct node Stack;
Stack* get_node()
{
Stack *tmp;
tmp = (Stack*) malloc(sizeof(Stack));
tmp->link = EMPTY;
return tmp;
}
void push(Stack **top, int data)
{
Stack *tmp;
tmp = *top;
*top = get_node();
(*top)->data = data;
(*top)->link = tmp;
}
void pop(Stack **top)
{
Stack *tmp;
int num;
if (top == EMPTY)
{
printf("Stack is Empty!");
}
else
{
tmp = *top;
printf("%d", tmp->data);
*top = tmp->link;
free(tmp);
}
}
void stack(Stack *top)
{
if (top == EMPTY)
{
printf("Stack is Empty...");
}
else
{
Stack *tmp = top;
while (tmp->link != EMPTY)
{
printf("%d", tmp->data);
tmp = tmp->link;
}
}
}
void menu(int choice)
{
Stack *top = EMPTY;
int data;
switch (choice)
{
case 1:
printf("Enter Data : ");
scanf_s("%d", &data);
push(&top, data);
break;
case 2:
pop(&top);
break;
case 3:
stack(top);
break;
case 4:
exit(1);
}
}
void main()
{
int choice;
printf("< < = M e n u = = >\n");
printf("1.push\n");
printf("2.pop\n");
printf("3.print_all\n");
printf("4.quit\n");
printf("Select : ");
while (1)
{
scanf_s("%d", &choice);
menu(choice);
}
}
“我的代码有什么问题”:这是一个非常糟糕的方式来描述你的问题。 –
哦,我很抱歉,这是我第一次使用这个网站,我不知道如何制作一个好标题。我应该怎样编辑它? – Kitty
你应该把问题缩小到[mcve]。然后你就会知道要改变的标题 –