我正在尝试创建一个模拟堆栈的程序。的要求是:使用双链表进行堆栈模拟
被叫节点结构
命名的整数数据
相同类型节点命名下和以前
空隙推(int)的原型 的两个指针int pop()原型
我建立了我的push()功能如下:
#include <stdio.h>
struct node {
int data;
struct node *next;
struct node *prev;
};
struct node *first = NULL;
void push(int number);
int pop();
int main() {
int choice = 0, number;
printf("Enter your choice: \n"
"1) Push integer\n"
"2) Pop integer\n"
"3) Exit\n");
scanf("%d", &choice);
while (choice != 3) {
if (choice == 1) {
printf("Enter Integer: ");
scanf("%d", &number);
printf("\n");
push(number);
}
if (choice == 2) {
number = pop();
if (number == -1) {
printf("Error: Stack empty.\n\n");
}
else {
printf("Integer %d is popped.\n\n", number);
}
}
printf("Enter your choice: \n"
"1) Push integer\n"
"2) Pop integer\n"
"3) Exit\n");
scanf("%d", &choice);
}
}
void push(int number)
{
struct node *cur;
cur = first;
if (cur == NULL) {
cur = (struct node *) malloc(sizeof(struct node));
cur->data = number;
cur->next = NULL;
cur->prev = cur;
first = cur;
return;
}
if (cur != NULL) {
while (cur->next != NULL) {
cur = cur->next;
}
(cur->next) = (struct node *) malloc(sizeof(struct node));
(cur->next)->data = number;
(cur->next)->next = NULL;
(cur->next)->prev = cur;
}
}
int pop() {
int number;
if (first == NULL) {
return -1;
}
else {
struct node *cur, *prev;
cur = first;
prev = NULL;
while (cur->next != NULL) {
prev = cur;
cur = cur->next;
}
number = cur->data;
if (prev == NULL) {
first = NULL;
}
else {
prev->next = cur->next;
}
return number;
}
}
这样看起来好吗?用户输入数字后,我的主程序冻结。
作为一个侧面说明,你的'如果(CUR!= NULL)'与'而(CUR!= NULL)冗余'它包含了,作为你的无论如何,如果条件最初不是真的,程序将不会进入循环。 – zneak
感谢您的支持!我改变了我完全摆脱了if语句。 – raphnguyen
不,你没有。哦,等等,在你的代码中,对吧? –