C++链表课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

链表的那些事

什么是链表

链表是由若干个节点组成。

节点通常是结构体变量或对象

每个链表必定存在一个头指针,指向链表的第一个节点

头指针

节点

链表节点的类型

链表的节点通常是结构体类型(struct)或者是类(class)

该类中至少包含一个指向自身的指针struct StudentNode

{char Name[40];

char Addr[20];

StudentNode*Next;

};

链表的基本动作

生成一个节点 用new分配一个节点,例如

p=new StudentNode;

p

用delete释放一个节点,例如delete p;

让一个指针指向存在的节点

假设q指向一个已存在的节点

执行语句:

p=q;

q

p

让节点的指针指向另一个节点

p=new StudentNode;

。。。

q=new StudentNode;

。。。。

p->next=q

p q

让指向节点的指针指向下一个节点

假设p指向链表中某一节点,执行语句

p=p->next;

p

判断是否为空

1.通过判断头指针是否为0来判断链表是否

为空

if(head==NULL)…

2.判断节点后面是否有节点

if(r->next!=NULL) …

链表的组合动作

节点的插入

插入节点有三种情况:

在链表的前面插入或插在空链表中

插在链表的最后面

插在链表的中间

向链表中插入节点

newnode info x

info 0info 1············

·

head head 插在链首

首先新结点的next 指针指向info 0所在结点,然后,head 指向新结点。即:

newnode →next=head ;//注意:链表操作次序非常重要head=newnode ;

向链表中插入节点info x info i-1info i

p

qnewnode

插在中间

首先用工作指针p 找到指定结点,而让指针q 指向紧跟其后的结点,令info i-1所在结点的link 指针指向新结点,而后让新结点的next 指向info i 所在结点。即:

newnode →next=p ;//或newnode →next=q →next ;可用于插入某结点之后q →next=newnode ;

向链表中插入节点info x newnode

············p

0Infon-1 ^插在队尾

只要工作指针p 找到队尾,即可链在其后:newnode.next=NULL;

p→next=newnode ;

Infon-1

问题:

向链表中间插入节点和向链表尾部插入节点算法能否合

并?

节点的删除 删除节点有三种情况:

删除链表的最前面的节点

删除链表的最后面的节点

删除链表的中间的节点

删除节点info0info 1info 2

p

head head

在链表最前面删除一个节点流程:

令一个指针q 指向链表的最前面节点

p=head;

令头指针指向链表的下一个节点

head=head->next; 删除该节点delete p

删除节点

在链表中间删除一个节点流程:

令一个指针q指向要删除节点的前一个节点

p=q->next;

令删除节点的前一个节点的next指针指向被删除节

q->next=q->next->next或q->next=p->next;

删除该节点delete p

info0info1info2

q p

删除节点info0info 1q p

在链表末尾删除一个节点流程:

令一个指针q 指向尾节点的前一个节点 p=q->next;

令原尾节点的前一个节点的next 指针等于NULL 。

q->next=NULL;

delete p

问题:

向链表中间删除节点和向链表尾部删除节点算法能否合

并?

单链表基本算法

链表必定存在一头指针,指向链表头一个节点。

单链表的第一个结点的地址可通过链表的表头指针head 找到,head在使用中必须妥善保存,千万不可丢失,否则链表整个丢失,内存也发生泄漏。

当链表为空时,应对head赋予0,表示当前链表为空

单链表的操作:

1.节点的插入和链表的生成

2.遍历(输出链表中的内容)

3.节点的删除

4.链表的删除

建立无序新链表思路

思路:

建立新的节点,并将其插在链表的最后面。故先定义新的指针变量node* r;并使其指向链表最后一个节点,当要插入新的节

点时,使r->next指向新的节点,再把r往后移一格。

相关文档
最新文档