线性表是最简单,最常用的一种数据结构。线性表的逻辑结构是n个数据元素的有限序列(a1,a2,…,an)。而线性表的物理结构,我们已经学习过顺序表,也就是数组 ;另一种线性表的物理结构——链表 。

什么是单链表

单链表(Singly Linked list)也称线性链表。每个元素占用一个节点(Node)。一个节点至少包含两个域,一个域存放数据信息info,其数据类型由应用问题决定,另一个存放指向该链表中下一个节点的指针link。
 

单链表的c++实现思路

◆ 1、单链表节点的数据类型
typedef int Datatype; //节点的数据为整型
struct node
{
    Datatype info;//节点的数据信息
    node *link;
//指向下一个节点的指针,是结构自身的指针类型,决不能是结构自身类型
};

◆ 2、由节点形成单链表
单链表的第一个节点首先通过new运算获得,并用链表的表头指针head指向, head在使用中必须妥善保存,千万不可丢失,否则单链表整个丢失,内存也发生泄漏。
    ……//有关node的声明,见上段代码
    node *head;
    head=new node;
    //第一个节点的数据不赋值,则该节点仅作head
    head->link=NULL;//指针初始化

单链表后面的节点可以通过插入与删除来维护:只要改变链中节点指针的指向,而无需移动表中的元素,就能实现插入和删除操作。

单链表的基本插入算法

现在已经存在单链表“head”,插新节点时考虑三种情况:

  1. 新插入节点作为单链表的第一个结点;
  2. 也有可能新插入节点是中间节点;
  3. 也有可能新插入节点作为最后一个节点。

首先要先产生新节点:
    ……//有关node的声明
    node *newone;
    newone=new node;
    newone->info=13;//给该节点的数据赋值
    newone->link=NULL;//指针初始化

◆ 1、新节点插在链首
    //注意:链表操作次序非常重要
    ……//node、head、newone的声明及定义,见上面
    newone->link=head->link;
    Head->link=newone;//注意指针赋值

◆ 2、新节点插在单链表中间
首先用工作指针p找到指定节点,而让指针q指向紧跟其后的节点;新节点插在p、q之间;
    node *p,*q;
    ……//此段代码实现:利用查找算法将p定位在指定节点(稍后将学习)
    q=p->link; //注意指针赋值
    newone->link=q;
    //或newone->link=p->link;这样就不需要q了

    p->link=newone;
 
 
如有问题,欢迎和我联系。 我的邮箱 cq20151207@163.com 
 

C++ 单链表的基本算法的更多相关文章

  1. 数据结构 单链表&顺序表

    顺序表: 一般使用数组(C语言中的数组采用顺序存储方式.即连续地址存储)来描述. 优点:在于随机访问元素, 缺点:插入和和删除的时候,需要移动大量的元素. 链表: 优点:插入或删除元素时很方便,使用灵 ...

  2. 数据结构(java版)学习笔记(三)——线性表之单链表

    单链表的优点: 长度不固定,可以任意增删. 单链表的缺点: 存储密度小,因为每个数据元素,都需要额外存储一个指向下一元素的指针(双链表则需要两个指针). 要访问特定元素,只能从链表头开始,遍历到该元素 ...

  3. 单链表的插入伪算法和用C语言创建单链表,并遍历

    非循环单链表插入结点伪算法讲解 q插入p之后的伪算法:第一种表示方法:r = p->pNext; // p->pNext表示的是所指向结点的指针域,指针域又是指向下一个结点的地址p-> ...

  4. 数据结构实验2:C++实现单链表类

    太简单了,直接贴题目然后上代码. 题目: 实验2 2.1 实验目的 熟练掌握线性表的链式存储结构. 熟练掌握单链表的有关算法设计. 根据具体问题的需要,设计出合理的表示数据的链式存储结构,并设计相关算 ...

  5. C++ "链链"不忘@必有回响之单链表

    1. 前言 数组和链表是数据结构的基石,是逻辑上可描述.物理结构真实存在的具体数据结构.其它的数据结构往往在此基础上赋予不同的数据操作语义,如栈先进后出,队列先进先出-- 数组中的所有数据存储在一片连 ...

  6. 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

    一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...

  7. Reverse反转算法+斐波那契数列递归+Reverse反转单链表算法--C++实现

    Reverse反转算法 #include <iostream> using namespace std; //交换的函数 void replaced(int &a,int & ...

  8. 特殊的反转单链表算法(C++)

    普通的单链表反转算法 大学的时候也做过好几次单链表的反转,记得当时都是用三个变量不断修改next的值然后实现反转. ListNode* reverseList(ListNode* head) { Li ...

  9. cc150:实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针

    实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针. 样例: 输入:指向链表a->b->c->d->e中结点c的指针 结果:不须要返回什么,得到一个新链表:a- ...

随机推荐

  1. MySQL 127.0.0.1和localhost本质区别

    登录方式: [root@10-4-14-168 ~]# mysql -uroot -p Enter password: 查看权限表 mysql> SELECT user,host,passwor ...

  2. Codeforces Round #181 (Div. 2) B. Coach 带权并查集

    B. Coach 题目连接: http://www.codeforces.com/contest/300/problem/A Description A programming coach has n ...

  3. 使用PageHeap.EXE或GFlags.EXE检查内存越界错误 (转)

    2011-05-27 20:19 290人阅读 评论(0) 收藏 举报 microsoftdebuggingstructureoutputimagefile 必先利其器之一:使用PageHeap.EX ...

  4. hdu5071 2014 Asia AnShan Regional Contest B Chat

    模拟题: add的时候出现过的则不再添加 close的时候会影响到top rotate(Prior.Choose)的时候会影响到top /*============================== ...

  5. 识货的拿走:Android游戏框架解读之总体结构

    Android游戏开发的框架图无偿奉上.

  6. TCP/IP数据包结构具体解释

    [关键词] TCP IP 数据包 结构 具体解释 网络 协议 一般来说,网络编程我们仅仅须要调用一些封装好的函数或者组件就能完毕大部分的工作,可是一些特殊的情况下,就须要深入的理解 网络数据包的结构, ...

  7. 大型JavaScript应用程序架构模式

    11月中旬在伦敦举行的jQuery Summit顶级大会上有个session讲的是大型JavaScript应用程序架构,看完PPT以后觉得甚是不错,于是整理一下发给大家共勉. PDF版的PPT下载地址 ...

  8. The Kernel Newbie Corner: Kernel Debugging with proc "Sequence" Files--Part 2

    转载:https://www.linux.com/learn/linux-career-center/39972-kernel-debugging-with-proc-qsequenceq-files ...

  9. 功能分解——Android下画分时图与k线图有感

    最近工作极度繁忙,已经好久没有更新博客了,总感觉要是再不抽空总结总结点东西,分分钟就会被懒惰的状态给打到了.同时也希望同学们谨记,如果你已经决定要坚持某些正确的东西,比如背完某章单词,看一完本书抑或是 ...

  10. linux安装问题

    java: cannot execute binary file问题 主要原因是 linux系统是32位的,jdk版本是64位的. 补充知识: 1.查看linux位数: #uname -a 如果有x8 ...