如何在C ++的链表中添加int指针值?

时间:2010-12-11 07:37:39

标签: c++ list pointers linked-list

我已经在这个家庭作业工作了一段时间,我无法弄清楚我做错了什么。我的程序如何工作:
用户输入尽可能多的正数,
数字在链表中,
输入的数字应加起来,
除以输入的数字,
导致平均,
然而,它并没有按照我的预期运作,而且我已经玩了3个多小时了。我会联系我的老师,但她还没有回复我的上一条消息,我现在需要帮助。提前谢谢。

注意:我需要遍历列表以添加所有输入的数字并计算节点数。

#include <iostream>
using namespace std;

int num, total, num_entries = 1;

struct number_node
{
 int number;
 number_node *next;
};

number_node *head_ptr;
number_node *current_ptr;

int get_number_data(int &number);
void add_node(int &number);
void move_current_to_end();
void display_avg();
void delete_list();

int main()
{
 if(get_number_data(num))
 {
  head_ptr = new number_node;
  head_ptr->number = num;
  head_ptr->next = NULL;

  while(get_number_data(num))
  {
   add_node(num);
  }
  display_avg();
  delete_list();
 }

 system("pause");
 return 0;
}

int get_number_data(int &number)
{
 int keep_data = 1;

 cout << "Enter a positive number (Enter a negative number to stop): ";
 cin >> num;
 if(num < 0)
 {
  keep_data = 0;
 }

 return(keep_data);
}

void add_node(int &number)
{
 number_node *new_rec_ptr;

 new_rec_ptr = new number_node;

 new_rec_ptr->number = num;
 new_rec_ptr->next = NULL;

 move_current_to_end();
 current_ptr->next = new_rec_ptr;
}

void move_current_to_end()
{
 current_ptr = head_ptr;
 num_entries++;

 while(current_ptr->next != NULL)
 {
  current_ptr = current_ptr->next;
  total = current_ptr->number + total;
 }
}

void display_avg()
{
 current_ptr = head_ptr;
 cout << "Average = " << total / num_entries << endl;
}

void delete_list()
{
 number_node *temp_ptr;

 current_ptr = head_ptr;

 do
 {
  temp_ptr = current_ptr->next;

  delete current_ptr;

  current_ptr = temp_ptr;
 }
 while(temp_ptr != NULL);
}

4 个答案:

答案 0 :(得分:3)

现在,您正在将数据结构(链接列表)与您打算使用它的方式混合在一起。考虑将您的逻辑拆分为:

  • 您的I / O代码。
  • 链表实施。
  • 一个获取链表的函数,并计算平均值。

答案 1 :(得分:0)

你在那里有很多其他的东西而你没有说出你的代码做了什么,但是我会做这样的事情(未经测试):

 int count = 0;
 int total = 0;

 for (ptr = head_ptr; ptr != NULL; ptr = ptr->next)
 {
     total += ptr->number;
     count++;
 }

答案 2 :(得分:0)

我知道这对你的作业无济于事,但这是一个满足你要求的C ++ STL程序:

  • 与用户期望的一样多的输入
  • 数字存储在链接列表中
  • 数字已添加
  • 计算并显示平均值

祝你上课好运。

#include <list>
#include <iterator>
#include <iostream>
#include <algorithm>
#include <numeric>

int main()
{
  std::list<double> l;

  std::copy(std::istream_iterator<double>(std::cin),
    std::istream_iterator<double>(),
    std::insert_iterator<std::list<double> >(l, l.begin()));

  size_t size = l.size();
  if(size)
    std::cout << std::accumulate(l.begin(), l.end(), 0.0) / l.size()
      << std::endl;
}

答案 3 :(得分:0)

道歉:本来会附上评论来问这个介绍性问题。但显然你需要比现在更高的代表。

@Brandon。我可以让你明确说明这些功能:

int get_number_data(int&amp; number)

void add_node(int&amp; number)

void move_current_to_end()

void display_avg()

只有这些你可以使用? (我引用你的话说:“我只需要弄清楚使用这些功能的节点总数和节点数”

如果是这样的话。为什么?你的讲师是否指定过它们?