gpt4 book ai didi

c++ - 节点类构造函数实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:26:12 28 4
gpt4 key购买 nike

我目前有我的节点类的这段代码,它存储两个名字、一个 ID 号,并具有下一个能力:

class Node{
public:
char LastName[20] ;
char FirstName[20] ;
int IDnumber ;
Node *Next ;

Node();
void printNode();
};

这是我用来从键盘初始化节点变量的构造函数:

Node::Node(){

cout << "Enter ID number: " << endl;
cin >> IDnumber;
cout << "Enter last name: " << endl;
cin >> LastName;
cout << "Enter first name: " << endl;
cin >> FirstName;
Next=NULL;
}

void Node::printNode(){
cout << "ID number: " << IDnumber << endl;
cout << "Last name: " << LastName <<endl;
cout << "First name: " << FirstName << endl;
}

我遇到的问题是,每当我稍后在代码中调用 printNode() 函数时,我的代码都无法执行 printNode() 函数的第一行。 (未处理的异常)当我尝试使用单独的链表类调用 node->Next 时,我也无法执行此代码。这让我相信我没有正确构建节点。关于我的代码中可能有什么问题的任何想法?

链表是一个单独的类,它使用了我上面发布的节点类。

class LinkedList{

private:
Node* list;
Node* createNode();
Node* searchLocation(int);

public:

LinkedList();
~LinkedList();

void InsertNode();
void SearchNode();
void PrintList();
void DeleteNode(int);

};


LinkedList::LinkedList(){
Node* list = NULL;
}

Node* LinkedList::createNode(){
Node *NewNode = new Node();
return NewNode;
}

void LinkedList::InsertNode(){
Node* insert = createNode();
if (list == NULL){
list = insert;}}

void LinkedList::PrintList(){
Node* temp = list;
while (temp != NULL){
temp->printNode();
temp = temp->Next;
}
}

我的 LinkedList 类的 PrintList() 函数在 list->printNode() 时失败(在 cout << IDnumber 行有中断)并且在 list = list->Next 行也失败。

int main(){

int num = 0;
LinkedList list;

int menu=0;
while(menu != 5){

cout << endl << "Choose a menu option." <<endl
<< "1. Insert node " << endl << "2. Delete node " << endl
<< "3. Print list" << endl << "4. Search a node & print info" << endl
<< "5. Quit program " << endl;


cin >> menu;
menu = validate(menu);

switch(menu){
case 1:
list.InsertNode();

break;

case 3:
list.PrintList();

break;
}}

return 0;

}

最佳答案

您的代码中几乎没有错误。最重要的是,当您应该引用一些常见的 Node,即静态变量时,您引用始终为 NULL 的本地 list 指针。

在这里你可以找到工作解决方案,请添加正文以正确释放列表

~LinkedList(){}

你还好:

链表:

class LinkedList{

private:
static Node* list;
Node* createNode();
Node* searchLocation(int);

public:
LinkedList();
~LinkedList(){}
void InsertNode();
void SearchNode();
void PrintList();
void DeleteNode(int);
};

Node* LinkedList::list = NULL;
^
don't foget to initialize pointer to static object

LinkedList::LinkedList(){
Node* list = NULL;
}

Node* LinkedList::createNode(){
Node *NewNode = new Node();
return NewNode;
}

void LinkedList::InsertNode(){
Node* insert = createNode();
if(list==NULL)list=insert;
else
list->Next = insert;
}

void LinkedList::PrintList(){
Node* temp = list;
while (temp != NULL){
temp->printNode();
temp = temp->Next;
}
}

和主要:

int main(){

int num = 0;
LinkedList list;

cout << endl << "Choose a menu option." <<endl
<< "1. Insert node " << endl << "2. Delete node " << endl
<< "3. Print list" << endl << "4. Search a node & print info" << endl
<< "5. Quit program " << endl;

list.InsertNode();
list.InsertNode();

list.PrintList();

return 0;

}

输出:选择一个菜单选项。1.插入节点2.删除节点3.打印 list 4.搜索节点并打印信息5.退出程序
输入身份证号码:8个输入姓氏:我输入名字:j输入身份证号码:9输入姓氏:k输入名字:

身份证号码:8

姓氏:我

名字:j

身份证号码:9

姓氏:k

名字:l

运行成功(总时间:14s)

关于c++ - 节点类构造函数实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19018802/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com