有人能告诉我这是否是链接列表的基本概念?在C ++中实现链接列表时,此方法的优缺点是什么?最佳实践是什么?我是数据结构的新手,所以这是我的第一个方法。如果有更好的方法来做同样的事情,请告诉我。另外,如何在不进行硬编码的情况下动态创建节点?谢谢。
#include <iostream>
#include <string>
using namespace std;
struct node {
int x;
node *next;
};
int main()
{
node *head;
node *traverser;
node *n = new node; // Create first node
node *t = new node; // create second node
head =n; //set head node as the first node in out list.
traverser = head; //we will first begin at the head node.
n->x = 12; //set date of first node.
n->next = t; // Create a link to the next node
t->x = 35; //define date of second node.
t->next = 0; //set pointer to null if this is the last node in the list.
if ( traverser != 0 ) { //Makes sure there is a place to start
while ( traverser->next != 0 ) {
cout<< traverser->x; //print out first data member
traverser = traverser->next; //move to next node
cout<< traverser->x; //print out second data member
}
}
traverser->next = new node; // Creates a node at the end of the list
traverser = traverser->next; // Points to that node
traverser->next = 0; // Prevents it from going any further
traverser->x = 42;
}
答案 0 :(得分:0)
我更喜欢制作链表类。这消除了不止一次调用'new'的需要。可以找到一个带有示例的很好的实现here。
答案 1 :(得分:0)
您实际上已经在进行动态分配了。所以,不确定你要求的是什么。但是,如果要定义函数以将新节点添加到链接列表(或删除节点等),这可能是一个可能的解决方案:
插入/删除位置节点取决于数据结构的类型。在队列中,新节点将被添加到结尾;在堆栈的情况下在顶部。将节点添加到顶部的功能,模拟STACK推送操作:
void pushNode(node **head, int Value) {
node *newNode = new node;
newNode->x = Value;
newNode->next = *head;
*head = newNode;
}
它会被称为pushNode(&head, 15)
,其中&#39; head&#39;将被定义为node *head = NULL
。根head
最初应设置为NULL
。在此操作之后,head
将指向新添加的节点(堆栈顶部)。
这种方法对于其他数据结构(即队列)非常相似,并且工作正常。但是当你使用C ++时,我建议为你的链表定义一个类,并将这些函数定义为方法。这样,它将更方便,更不容易出错。
更好地使用std::list
。它是标准的东西,比定制实现更具可移植性和强大性。
答案 2 :(得分:0)
出于教学目的,您可以计算出这个例子:
#include <iostream>
using namespace std;
struct myList
{
int info;
myList* next;
};
int main()
{
//Creation part
myList *start, *ptr;
char ch = 'y';
int number;
start = new myList;
ptr = start;
while (ptr != NULL)
{
cout << "Enter no. ";
cin >> ptr->info;
cout << "Continue (y/n)? ";
cin >> ch;
if (ch == 'y')
{
ptr->next = new myList;
ptr = ptr->next;
}
else
{
ptr->next = NULL;
ptr = NULL;
}
}
//Traversal part begins
cout << "Let's start the list traversal!\n\n";
ptr = start;
while (ptr!=NULL)
{
cout << ptr->info << '\n';
ptr = ptr->next;
}
}
它为您想要添加的元素动态分配内存。
答案 3 :(得分:0)
您也可以通过这种方式完成
#include <iostream>
using namespace std;
struct Node{
int data;
Node* next;
};
void createList(Node** head ,Node* temp){
int n;
char ch;
temp = *head;
while(temp != NULL){
cout<<"Enter The Value ";
cin>>temp->data;
cout<<"DO you want to continue(y/n)";
cin>>ch;
if(ch=='Y' || ch == 'y'){
temp->next = new Node;
temp = temp->next;
}else{
temp->next = NULL;
temp = NULL;
}
}
}
void ShowList(Node* head){
cout<<"your list :"<<endl;
while(head != NULL){
cout<<head->data<<" ";
head = head->next;
}
}
int main()
{
//Creation part
Node *head, *temp;
createList(&head,temp);
ShowList(head);
}