b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

单个链接列表的C ++实现

电脑杂谈  发布时间:2020-03-27 20:09:56  来源:网络整理

c语言 链表_c/c++链表_c ++链表

链表是一个相对简单的线性数据结构. 对于顺序表,通常在插入和删除数据时会移动相对大量的元素,并且当单链接列表处理这种情况时c/c++链表,只需要更改一些指针即可,这样效率更高.

单个链接列表概述:

链表中的数据由节点表示. 每个节点的结构是: 元素(数据元素的图像)+指针(指示后续元素的存储位置). 连接每个节点的地址数据. 由“节点序列”表示的线性列表称为线性链接列表或单个链接列表.

实施过程:

首先构造一个节点结构:

typedef struct Node {

int数据; //节点的data字段用于存储数据,这里定义为整数或其他类型的变量

节点*接下来; //节点的指针字段,用于存储后续节点的地址

} M_Node; //将其重命名为其自身的结构M_Node.

接下来是列表类的构建

班级列表{

M_Node *头; //定义的头指针

公开

:

list(){head = NULL;} //构造函数将链接列表初始化为空列表(头指针指向NULL)

void M_Insert(int ac/c++链表,intb); //插入列表节点,在元素a之前插入b

void M_Delete(int a); //删除链接列表节点

void M_Output(); //列表节点的输出

M_Node * Gethead(){return head;}​​ //获取头节点的数据

};

链接列表元素的访问过程:

由于链接列表中的节点是通过指针链接的,因此存储单元是连续的. 因此,列表中任何节点的地址都不能与数组相同. 它使用简单的随机访问公式来计算. . 它只能从链接列表的头指针(即头)开始. 使用指针p首先指向第一个节点,然后根据节点p找到下一个节点. 依此类推,直到找到您要访问的节点或直到最后一个节点(指针为空)为止.

成员函数的实现如下:

首先是M_Output()函数,其功能是输出链接列表的所有元素.

1. 构造指向第一个节点头节点的指针.

2. 使用指针输出该节点的数据.

c/c++链表_c语言 链表_c ++链表

3. 向后移动指针

4. 循环执行步骤2和3,直到指针指向NULL

无效列表:: M_Output()

{

M_Node * current = head;

同时(当前!= NULL)

{

cout << current->数据<<“”;

current = current-> next;

}

cout << endl;

}

接下来看看如何实现元素插入操作:

元素插入的功能是在元素a之前插入元素b. 有几种情况需要考虑:

1. 如果原始链表为空列表,则将插入的元素用作头节点.

2. 如果元素a是头节点,则插入的元素b将替换a作为头节点

3. 如果元素a在链表中而不是第一个元素,则首先找到a的前一个元素a_1,然后让a_1的指针字段指向b,b的指针字段指向a,然后插入完成

4. 如果元素a不在列表中,则将其插入末尾. 找到最后一个元素a_n,a_n的指针字段指向b,b的指针字段指向null.

无效列表:: M_Insert(int a,int b)

{

M_Node * p,* q,* s; // p指向节点a,q指向节点a_k,s指向节点b

s =(M_Node *)新(M_Node); //动态分配新节点

s->数据= b; //设b为该节点

p =头;

if(head == NULL)//如果为空列表,则将b设为第一个节点

{

c/c++链表_c ++链表_c语言 链表

head = s;

s-> next = NULL;

}

其他

if(p-> Data == a)//如果a是第一个节点

{

s-> next = p;

head = s;

}

其他

{

while(p-> Data!= a && p-> next!= NULL)//查找节点a

{

q = p;

p = p->接下来;

}

if(p-> Data == a)///如果存在节点a

{

q-> next = s;

s-> next = p;

}

else //如果没有节点a;

{

p-> next = s;

s-> next = NULL;

}

c语言 链表_c ++链表_c/c++链表

}

}

接下来,查看删除操作,该操作可以分为以下几种情况:

1. 如果链表为空或被删除的元素不存在,则删除操作错误并且不执行任何操作.

2. 如果第一个节点被删除,则将头指向a的下一个节点

3. 如果a在链接列表中,并且不是第一个元素,请找到a的上一个节点,并将其指针字段指向a的下一个节点.

无效列表:: M_Delete(int a)

{

节点* p,* q; // p用于指向节点a,q用于指向节点a的上一个节点

p =头;

if(p == NULL)//如果是空表

返回;

if(p-> Data == a)//如果a是第一个节点

{

head = p->接下来;

删除p;

}

其他

{

while(p-> Data!= a && p-> next!= NULL)//查找节点a

{

q = p;

p = p->接下来;

}

if(p-> Data == a)//如果有节点a

{

c/c++链表_c ++链表_c语言 链表

q->下一步= p->下一步;

删除p;

}

}

}

最后,让我们尝试此链接列表的功能.

int main(int argc,char ** argv){

列表A,B;

int数据[10] = {12,23,45,32,65,33,75,3,67,22};

A.M_Insert(0,数据[0]);

for(int i = 1; i <10; i ++)

A.M_Insert(数据[i-1],数据[i]);

cout <<“插入列表A向前” << endl;

A.M_Output();

for(int i = 0; i <10; i ++)

B.M_Insert(0,数据[i]);

cout <<“链接列表B向后插入” << endl;

B.M_Output();

A.M_Delete(23);

cout <<“列表23删除23个元素之后” << endl;

A.M_Output();

B.M_Insert(65,33);

cout <<“列表B在33之前的65个元素之后插入” << endl;

B.M_Output();

返回0;

}

链接列表的实现环境为DEV C ++

写得好,欢迎来吐槽.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-154530-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 伊用昌
        伊用昌

        你必须抱我美国人的大腿

      热点图片
      拼命载入中...