对结构体简单链表原理的简单解释,程序如下:
struct lianbiao
{
int no;
string name;
struct lianbiao* next;
};
lianbiao* head = nullptr, * tail = nullptr, * tmp = nullptr;
tmp = new lianbiao({ 1,"1",nullptr });
cout << tmp->no << endl <<"tmp地址"<< & tmp << endl <<"tmpnext值" << tmp->next << endl << endl;
head = tail = tmp;
cout << head->no << endl<<"head地址" << &head <<head<< endl <<"head next值" << head->next << endl;
cout << tail->no << endl <<"tail地址"<< & tail <<tail<< endl <<"tail next值" <<tail->next << endl << endl;
tmp = new lianbiao({ 2,"2",nullptr });
cout << "。" << endl;
cout << tmp->no << endl <<"tmp地址" << &tmp<<"hh"<<tmp << endl << "tmpnext值" << tmp->next << endl;
head->next = tmp;
cout << tail->no << endl <<"tail地址"<< &tail <<"hh" << tail << endl << "tail next值" << &(tail->next) << endl;
cout << head->no << endl << "head地址" << &head <<"hh" <<head<< endl << "head next值" << &(head->next) << endl;
tail = tmp;
cout << tail->no << endl << "tail地址" << &tail << endl << "tail next值" << &(tail->next) << endl;
tmp = new lianbiao({ 3,"3",nullptr });
cout << ".." << endl;
cout << tmp->no << endl << "tmp地址" << &tmp << endl << "tmpnext值" << tmp->next << endl;
tail->next = tmp;
cout << tail->no << endl << "tail地址" << &tail << endl << "tail next值" << tail->next << endl;
cout << head->no << endl << "head地址" << &head << endl << "head next值" << head->next << endl;
tail = tmp;
cout << tail->no << endl << "tail地址" << &tail << endl << "tail next值" << tail->next << endl;
cout << head->no << endl << "head地址" << &head << endl << "head next值" << head->next << endl;
tmp = head;
cout << "." << endl;
cout << tmp->no << endl << &tmp << endl << tmp->next << endl;
while (tmp != nullptr)
{
cout << "0000" << endl;
cout << tmp->no << endl<<&tmp<<endl<<tmp->next << endl;
cout << tail->no << endl << "tail地址" << &tail << endl << "tail next值" << tail->next << endl;
cout << head->no << endl << "head地址" << &head << endl << "head next值" << head->next << endl;
tmp = tmp->next;
}
while (head != nullptr) {
tmp = head;
head = head->next;
delete tmp;
}
运行结果如下:
1
tmp地址000000C8F6BCF168
tmpnext值0000000000000000
1
head地址000000C8F6BCF1280000027FE3431F50
head next值0000000000000000
1
tail地址000000C8F6BCF1480000027FE3431F50
tail next值0000000000000000
。
2
tmp地址000000C8F6BCF168hh0000027FE3420F50
tmpnext值0000000000000000
1
tail地址000000C8F6BCF148hh0000027FE3431F50
tail next值0000027FE3431F80
1
head地址000000C8F6BCF128hh0000027FE3431F50
head next值0000027FE3431F80
2
tail地址000000C8F6BCF148
tail next值0000027FE3420F80
..
3
tmp地址000000C8F6BCF168
tmpnext值0000000000000000
2
tail地址000000C8F6BCF148
tail next值0000027FE341F350
1
head地址000000C8F6BCF128
head next值0000027FE3420F50
3
tail地址000000C8F6BCF148
tail next值0000000000000000
1
head地址000000C8F6BCF128
head next值0000027FE3420F50
.
1
000000C8F6BCF168
0000027FE3420F50
0000
1
000000C8F6BCF168
0000027FE3420F50
3
tail地址000000C8F6BCF148
tail next值0000000000000000
1
head地址000000C8F6BCF128
head next值0000027FE3420F50
0000
2
000000C8F6BCF168
0000027FE341F350
3
tail地址000000C8F6BCF148
tail next值0000000000000000
1
head地址000000C8F6BCF128
head next值0000027FE3420F50
0000
3
000000C8F6BCF168
0000000000000000
3
tail地址000000C8F6BCF148
tail next值0000000000000000
1
head地址000000C8F6BCF128
head next值0000027FE3420F50
主要关键步骤在于
head->next = tmp;
此部分代码运行结果如下:
。
2
tmp地址000000C8F6BCF168hh0000027FE3420F50
tmpnext值0000000000000000
1
tail地址000000C8F6BCF148hh0000027FE3431F50
tail next值0000027FE3431F80
1
head地址000000C8F6BCF128hh0000027FE3431F50
head next值0000027FE3431F80
2
tail地址000000C8F6BCF148
tail next值0000027FE3420F80
可以看出,在head = tail = tmp;操作中,将三者的结构体指针指向了同一地址,因此通过将临时结构体的地址传给tail 或head的结构体指针,即可实现第一个位置传递,之后再将第二个临时结构体赋给tail结构体,实现tail结构体结构体指针next的更改与清零,此时tail next 与headnext已不再是同一地址,因此不会改变head next值;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)