在C++中,可不可以把LIST链表中的数,转化成一个m*n的数组?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C++中,可不可以把LIST链表中的数,转化成一个m*n的数组?相关的知识,希望对你有一定的参考价值。
例如:把1,2,3,4,5,6,7,8变为一个a[2][4]的数组!
参考技术A 直接转换是不行的,要自己转换int **a = new (int *)[2];
a[0] = new int[4];
a[1] = new int[4];
for(int i = 0; i < 2; i++)
for(int j = 0; j < 4; j++)
a[i][j] = i * 4 + j + 1;
参考技术B int i,j=0;
for(i=0;i<list.len();i++)
if(i !=0 && i%4 == 0) j++;
a[j][i%4]=list.get(i);
本回答被提问者采纳
从 C++ 中的链表中获取元素
【中文标题】从 C++ 中的链表中获取元素【英文标题】:Get an element from a linked list in c++ 【发布时间】:2018-09-29 10:58:28 【问题描述】:我正在尝试返回链接列表中的数据以将其存储在变量中或直接在另一个函数中使用它,但我不完全知道如何实现它。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
template <class Object>
struct node
Object data;
node *next;
;
template <class Object>
class list
private:
node<Object> *head, *tail;
public:
list()
head=NULL;
tail=NULL;
void display()
node<Object> *temp=new node<Object>;
temp=head;
while(temp!=NULL)
cout<<temp->data<<" ";
temp=temp->next;
void createnode(Object value)
node<Object> *temp=new node<Object>;
temp->data=value;
temp->next=NULL;
if(head==NULL)
head=temp;
tail=temp;
temp=NULL;
else
tail->next=temp;
tail=temp;
void insert_start(Object value)
node<Object> *temp=new node<Object>;
temp->data=value;
temp->next=head;
head=temp;
node<Object> GetNth()
node<Object> *current = head;
while(current != NULL)
if(current->next == NULL)
return current->data;
void delete_last()
node<Object> *current=new node<Object>;
node<Object> *previous=new node<Object>;
current=head;
while(current->next!=NULL)
previous=current;
current=current->next;
tail=previous;
previous->next=NULL;
delete current;
;
int main()
ifstream ifile;
ifile.open( "input.txt" );
char word[300];
ifile >> word;
char* token = strtok( word, "," );
list<string> kids;
list<string> tasks;
while ( token != NULL )
kids.createnode(token);
token = strtok( NULL, "," );
ifile >> word;
token = strtok(word, ",");
while (token != NULL)
tasks.createnode(token);
token = strtok(NULL, ",");
int days;
cout << "Enter the number of days: ";
cin >> days;
tasks.display();
cout << endl;
int first = 0;
string nextTask;
while(first < days)
cout << "Day " << first + 1 << " ";
kids.display();
kids.insert_start(kids.GetNth());
kids.delete_last();
first++;
return 0;
该计划的目的是根据一天为每个孩子分配不同的任务。我目前在使用 getNth 函数时遇到问题,如果有人能帮助我,那就太好了。我感谢任何形式的帮助。
【问题讨论】:
不要给你的班级打电话list
。 C++ 中已经有一个std::list
。
另外,main
和链表类的任何其他用户都不应该知道任何关于 node
的信息——这是链表的实现细节。正确的方法是通过引用获取值的add
函数。 GetNth
应该返回一个值,等等。node
的概念不应该暴露在外面——让列表类自己来处理节点。
@PaulMcKenzie 称它为list
就好了,只要他们不叫using namespace std
。
我目前在使用 getNth 函数时遇到问题 -- 您没有说明您遇到的确切问题。该功能存在问题,但您需要说明您现在遇到的问题。
@MaqAlmulla -- 为什么main
应该知道节点?它只需要知道它使用了一个链表,并且链表包含值。为什么main
必须知道列表的内部结构? main
将值放入列表中,它从列表中获取值,而不是 nodes
。 GetNth
函数应该不返回节点。它应该返回一个存储在第 N 个节点的值。
【参考方案1】:
也许你有麻烦,因为如果列表为空,GetNth() 不会返回值。
node<Object> GetNth()
node<Object> *current = head;
while(current != NULL)
if(current->next == NULL)
return current->data;
return NULL;
【讨论】:
【参考方案2】:您可以使用 std::list,它已经包含在 C++ 中。您可以使用at
访问第n 个元素。
【讨论】:
std::list
没有 at()
成员函数。要到达第 n 个元素,请使用 std::next(list.begin(), n);
将迭代器返回到元素 n
。
是的,没错。 at() 函数在 QList 中。不过,对于随机访问,列表并不是那么有趣。以上是关于在C++中,可不可以把LIST链表中的数,转化成一个m*n的数组?的主要内容,如果未能解决你的问题,请参考以下文章
2.Add Two Numbers(List To Long)
从 O(1) 中的链表中删除任何元素 - Java vs C++