我是c ++的新手,我正在尝试使用c ++实现数据结构->链表,程序未显示任何错误,但不适用于多个元素,并且display_List()函数也不起作用事件,尽管它在主函数中被调用。
#include <iostream>
#include <conio.h>
using namespace std;
struct Node
{
int data_;
struct Node * link_;
};
struct Node * start = NULL;
void create_Node(int data)
{
struct Node * temp,*pos;
temp = new Node;
temp->data_=data;
temp->link_=NULL;
if(start==NULL)
start = temp;
else
{
pos = start;
while(pos->link_ != NULL)
{
pos=pos->link_;
}
pos->link_ = temp;
}
}
void display_List()
{
struct Node * Print;
Print = start;
while(Print->link_ != NULL || Print->link_==NULL)
{
cout << Print->data_;
if(Print->link_!=NULL)
cout<<"-->";
Print = Print->link_;
}
}
int main()
{
int Data , no_of_Element;
cout << "Enter the no_of_Element: "<<endl;
cin >> no_of_Element;
while (no_of_Element > 0)
{
cout << "Enter the Data to be inserted: "<<endl;
cin >> Data;
create_Node(Data);
no_of_Element--;
}
display_List();
return 0;
}
答案 0 :(得分:1)
$query = $database->query("SELECT EXISTS(SELECT * FROM contacts WHERE contact_id = '$contactID')";
if($query == 0){
echo "not registered";
}elseif($query == 1){
echo "registered"
}
应该是
void display_List()
{
struct Node * Print;
Print = start;
while(Print->link_ != NULL)
{
cout << Print->data_ <<"-->";
}
}
您的循环停止得太早了,因为您正在测试void display_List()
{
struct Node * Print;
Print = start;
while(Print != NULL)
{
cout << Print->data_ <<"-->";
Print = Print->link_;
}
}
而不是Print->link_ != NULL
。另外,因为您没有Print != NULL
,所以您永远不会移至列表中的下一项。
也
Print = Print->link_;
应该是
if(start==NULL)
start = temp;
else
struct Node * pos;
pos = start;
while(pos->link_ != NULL)
{
pos=pos->link_;
}
pos->link_ = temp;
您忘记在if语句的else部分周围添加if(start==NULL)
start = temp;
else
{
struct Node * pos;
pos = start;
while(pos->link_ != NULL)
{
pos=pos->link_;
}
pos->link_ = temp;
}
找到这些错误的简便方法(比发布到SO更容易)是使用调试器一次一行地遍历代码。调试器很快就会发现以上所有三个错误,您应该学习如何使用它。
答案 1 :(得分:1)
您的代码中有两个问题。
插入时if语句缺少括号。
进行如下更改。
if(start==NULL)
{
start = temp;
}
else
{
struct Node * pos;
pos = start;
while(pos->link_ != NULL)
{
pos=pos->link_;
}
pos->link_ = temp;
}
您的显示功能将导致无限循环,因为您没有递增Print
指针。
将其更改为以下内容。
while(Print != NULL)
{
cout << Print->data_ <<"-->";
Print = Print->link_;
}
答案 2 :(得分:1)
您的代码存在很多问题。
首先,在C ++中,您不需要像在C中那样,在结构类型的变量的类型名称前加上struct
关键字。
在create_Node()
中,您的else
缺少必需的大括号。
在display_List()
中,如果列表为空,则您的代码具有未定义的行为,因为Print
在取消引用时将为NULL。另一方面,如果列表具有多个节点,则代码将陷入无限循环,因为您没有在每次迭代中更新Print
来指向下一个节点。
在main()
中,您正在泄漏分配给列表的内存,然后退出。
尝试以下方法:
#include <iostream>
using namespace std;
struct Node
{
int data_;
Node * link_;
};
Node *start = NULL;
void create_Node(int data)
{
Node *temp;
temp = new Node;
temp->data_ = data;
temp->link_ = NULL;
if (start == NULL)
start = temp;
else
{ // <-- add this !
Node *pos;
pos = start;
while (pos->link_ != NULL)
{
pos = pos->link_;
}
pos->link_ = temp;
} // <-- add this!
}
void display_List()
{
Node *Print;
Print = start;
while (Print != NULL) // <-- change to this!
{
cout << Print->data_ << "-->";
Print = Print->link_; // <-- add this!
}
}
void destroy_List() // <-- add this!
{
Node *temp;
temp = start;
while (temp != NULL)
{
Node *next = temp->link_;
delete temp;
temp = next;
}
}
int main()
{
int Data, no_of_Element;
cout << "Enter the no_of_Element: " << endl;
cin >> no_of_Element;
while (no_of_Element > 0)
{
cout << "Enter the Data to be inserted: " << endl;
cin >> Data;
create_Node(Data);
no_of_Element--;
}
display_List();
destroy_List(); // <-- add this!
return 0;
}
话虽如此,其中一些代码可以进一步简化:
#include <iostream>
using namespace std;
struct Node
{
int data_;
Node *link_;
Node(int data) : data_(data), link_(NULL) {}
};
Node *start = NULL;
void create_Node(int data)
{
Node **cur = &start;
while (*cur)
cur = &((*cur)->link_);
*cur = new Node(data);
}
void display_List()
{
for(Node *cur = start; cur != NULL; cur = cur->link_)
cout << cur->data_ << "-->";
}
void destroy_List()
{
Node *next;
for(Node *temp = start; temp != NULL; temp = next)
{
next = temp->link_;
delete temp;
}
}
int main()
{
int Data, no_of_Element;
cout << "Enter the no_of_Element: "<< endl;
cin >> no_of_Element;
for (int i = 0; i < no_of_Element; --i)
{
cout << "Enter the Data to be inserted: " << endl;
cin >> Data;
create_Node(Data);
}
display_List();
destroy_List();
return 0;
}
话虽如此,一旦您了解了这一点,您就应该真正改用std::list
,甚至在C ++ 11及更高版本中使用std::forward_list
。
#include <iostream>
#include <list> // or <forward_list>
list<int> my_list; // or forward_list<int>
int main()
{
int Data, no_of_Element;
cout << "Enter the no_of_Element: "<< endl;
cin >> no_of_Element;
for (int i = 0; i < no_of_Element; --i)
{
cout << "Enter the Data to be inserted: " << endl;
cin >> Data;
my_list.push_back(Data);
}
for(list<int>::iterator iter = my_list.begin(); // or forward_list<int>
iter != my_list.end();
++iter)
{
cout << iter->data_ << "-->";
}
/* or, in C++11 and later:
for(auto data : my_list)
cout << data << "-->";
*/
return 0;
}