c++动态链表的操作步骤
来源:互联网 发布:大数据培训内容 编辑:程序博客网 时间:2024/06/16 16:28
一:以list类作为当前的指针空间
class list{
public:
int value;
list *next;
list(){
value=0; //创建list对象后自动执行
next=NULL;
}
};
二:head作为头指针,作用是为移动的指针定一个家,移动指针想回家时就可以通过head返回
list *head=NULL,
head=new list();
head->next=NULL;
head->value=15;
三:可以使用循环语句为链表赋值
每次循环,curr都要了一个list类空间(curr=new list()),给curr的value值有位置存放
然后为curr指针value元素赋值
原先head->value=15,此时curr->next=head,那么0-15,新建立的节点放在了head的前面,以此类推
for(int i=0;i<10;i++){
curr=new list();
curr->value=i;
curr->next=head;
head=curr;
}
四:链表的插入操作
想一想:假如0-1-2-3这样分布,想把100插到1的后面
首先得把curr的位置返回到头指针head先,然后curr在0的位置,curr->next=1;
把已经赋值的curr链表移动到1的位置
给insert指针一个list空间
insertz的value指向100;
curr的next(下一节点)指向insert(100)------->0 ------ 1-----2------3,可以发现100后面没有链了,这样不符合链表的连续性,得把100后面的链链接到1上
|_100
那么此时把100的next(下一节点)指向1(即0的下一节点,执行完while循环的curr->next位置)就完成了,0 1-------2 ------3
curr=head; |_100_|
while(curr->value!=1){
curr=curr->next;
}
next=curr->next;
insert=new list();
insert->value=100;
curr->next=insert;
insert->next=next;
curr=head;
while(curr!=NULL){
cout<<curr->value<<endl;
curr=curr->next;
}
五:链表的删除工作
想象一下:0-1-2-3-4链表结构。删掉2
我们的目的是删除节点指针pre移动到1,curr可以指到3位置,也就是curr到了2位置,2->next=3;那么我门直接把1->next = 2->nextt,就可以把2的链表断掉
0-1-3-4
还是一样curr先回家,再去找朋友
循环结束pre移动到1位置,curr位于2位置
因为先前动态newl了一个空间,那么删除之后可不要给它成为宇宙垃圾,把它delete掉吧 curr(2);
pre(1)->next=curr->next(3)
curr=head;
while(curr->value!=2){
pre=curr;
curr=curr->next;
}
next=curr->next;
pre->next=next;
delete curr;
完整的代码如下:
#include<iostream>
using namespace std;class list{
public:
int value;
list *next;
list(){
value=0;
next=NULL;
}
};
int main()
{
list *head=NULL,
*curr=NULL, //当前节点
*insert=NULL, //插入节点
*next=NULL, //后继节点
*pre=NULL; //前驱节点
head=new list();
head->next=NULL;
head->value=15;
for(int i=0;i<10;i++){
curr=new list();
curr->value=i;
curr->next=head;//p的节点指向head,位于head前面
head=curr; //然后p的地址给了head,然后head就成为了0,0位于首位
}
curr=head; //回到初始位置
while(curr->value!=5){//要插入5的后面
curr=curr->next;
}
//插入操作
next=curr->next;
insert=new list();
insert->value=100;
curr->next=insert;
insert->next=next;
curr=head; //curry已经到了100这了,然后是它回到初始位置
while(curr!=NULL){
cout<<curr->value<<endl;
curr=curr->next;
}
//删掉8节点
curr=head;
while(curr->value!=8){
pre=curr; //跳出后pre位于删除元素前面
curr=curr->next;
}
next=curr->next;
pre->next=next;
delete curr; //节点删除后应释放
curr=head;
cout<<"--------------分隔线-----------------------"<<endl ;
while(curr!=NULL){
cout<<curr->value<<endl;
curr=curr->next;
}
}
- c++动态链表的操作步骤
- 链表的编码步骤及操作
- 关于动态代理实现的步骤及操作
- 静态与动态顺序表操作的C语言实现
- C语言数据结构动态线性表的操作集
- DLL:创建和使用动态链接库的步骤 (C++)
- C实现的动态字符串操作
- 动态代理的步骤
- C的产生,特点,使用选择,与操作步骤概述
- Objective-c通过FMDB操作SQLite数据库的步骤
- 动态链表的基本操作
- 删除操作的步骤
- 数据库的操作步骤
- hadoop操作的步骤
- ajax的操作步骤
- JDBC的操作步骤
- 【c】链表的操作!!!
- 链表的操作(C)
- 使用json数据实现简单的三级联动
- jstl自定义函数
- Hi,我们再来聊一聊Java的单例吧
- 基于图的深度优先遍历(DFS)与广度优先遍历(BFS)
- 整数对HDU
- c++动态链表的操作步骤
- Euler Project : Problem 22
- trie 前缀树
- indexof(str)的用法
- java读取TXT文件的方法
- (个人)AR电子书系统创新实训第二周(1)
- requests库
- heartbeat(尽量保持唯一性存储)和keepalived (尽量保持可用)区别
- 桥接模式的应用