【问题标题】:Linked List Structure Push and Pop链表结构推送和弹出
【发布时间】:2013-07-23 23:26:45
【问题描述】:

我正在为一个要求用户输入数字的程序而苦苦挣扎,如果用户输入0,它只会停止要求用户输入数字。

但是我似乎无法将输入的第二个数字的值放入Data2

我们如何通过用户输入的数字将数字推入datadata2,然后将其与Data + data2相加并打印sum?

例如,用户输入1,2,0

【问题讨论】:

  • 对不起,我今天已经有足够的自制链接列表了。为什么每个人都如此反对使用 std::list 有效?
  • 可以是作业,也可以是实验
  • 我看了两三遍:(没看清楚。
  • 例如用户输入 1 2 0,那么 1 应该被推送到 Data1 中,2 应该被推送到 Data2 中,我的程序在 data1 和 data2 上都存储了 1 值。我不知道如何将它们分开并分别分配给data1和data2。所以变量应该包含 data1=1 和 data2=2

标签: c++ c


【解决方案1】:

您的问题在于输入,而不是列表。

尝试输入1 2 0 而不是1,2,0,你会发现它工作得很好。 (您不会得到输出 1 + 2 = 3,因为那不是您输出的内容。相反,您会得到 The sum of Popped item is 3

顺便说一句,while ( Num !=0) 的第一次出现在初始化之前使用了 Num。如果该值恰好为 0,则程序将无法运行。尝试将main() 顶部的int Num; 更改为int Num=99;

【讨论】:

  • 另外,Data2 不需要,可以删除。
  • 我的代码是用于该输出的,但我正在尝试输入像 1 2 0 这样的数字,并且应该将 1 推入 Data1,将 2 推入 Data2,并打印出结果 3一旦弹出。但我似乎无法将 1 和 2 分开并将它们放在 data1 和 data2 中,而是数据 1 包含 1,而 data2 仍然包含 1..
  • 但是它不适用于 3、4、5 或 999 号码。你说你希望程序“输入数字,如果用户输入 0,它只会停止要求用户输入数字。”
  • 你试过输入1 2 0吗?该程序正在运行,它只需要整理以摆脱Data2,并让输入接受逗号,如果这很重要的话。
【解决方案2】:

您使用单个num 调用函数push,它被存储到NewNode 两次,而不是第二个整数。

您必须使用data1data2 之类的整数调用push

while (1)
{
        scanf("%d", &Num1);
        scanf("%d", &Num2);
        if (num1 == 0 || num2 == 0)
              break;
        Push(Top, Num1,num2); //execute the Push Function

}

push里面

void Push(StackPointer &Top, int Num1,int num2)
{ 
 StackPointer NewNode;
 NewNode=(StackPointer)malloc(sizeof(struct Node));
 NewNode->Data = Num1;
 NewNode->Data2 =Num2;
 NewNode->Link = Top;
 Top = NewNode;
}

【讨论】:

  • scanf("%d", &Num1); scanf("%d", &Num2);此行将存储您在两个变量中输入的数字,例如您输入了 1、2,它将在 Num1 和 Num2 中存储 1
  • 是的,但是你只传递 num1 来推送并将其放在 data1 和 data2 中,下一次推送将数据输入到下一个节点
  • 通过使用此 scanf("%d", &Num1); scanf("%d", &Num2);无论你输入哪个 num 都会存储在 num1 和 num2...
猜你喜欢
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
相关资源
最近更新 更多