单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素。

对于查找操作,单链表的时间复杂度为O(n)。

对于插入和删除操作,单链表在确定位置后,插入和删除时间仅为O(1)。

单链表不需要分配存储空间,只要有就可以分配,元素个数也不受限制。

链式存储结构中,结点由存放数据元素的数据域和存放后继结点地址的指针域组成。

具体代码如下:

#include<iostream>
#define OK 1
#define ERROR 0
#define TRUE 1
#define ERROR 0
typedef int ElemType;
typedef int Status; struct Node{
public:
Node():data(0),next(NULL) {};
ElemType data;
Node *next;
Status GetElem(int i,ElemType *e) const;
Status ListInsert(int i,ElemType e);
Status ListDelete(int i,ElemType *e);
Status ShowList();
}; Status Node::GetElem(int i,ElemType *e) const
{
int j=1; /*j为计数器*/
Node *p=new Node;
p=next;
while (p && j<i)
{
p=p->next;
++j;
}
if (!p || j>i)
return ERROR;
*e=p->data;
return OK;
} /*初始条件:顺序线性表已存在,1<=i<=ListLength*/
/*操作结果:在表中第i个结点位置之前插入新的数据元素e,链表长度加1*/
Status Node::ListInsert(int i,ElemType e)
{
int j=1;
Node *p=new Node;
Node *s=new Node;
p=this;
while (p && j<i)
{
p=p->next;
++j;
}
if (!p || j>i)
return ERROR;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
} /*初始条件:线性表已经存在,1<=i<=ListLength*/
/*操作结果:删除表的第i个结点,并用e返回其值,线性表长度减1*/
Status Node::ListDelete(int i,ElemType *e)
{
int j;
Node* p=new Node;
Node* q=new Node;
p=this;
j=1;
while(p->next && j<i)
{
p=p->next;
++j;
}
if (!(p->next) || j>i)
return ERROR;
q=p->next; /*要删除的结点是p->next*/
p->next=q->next;
*e=q->data;
delete q;
return OK;
} Status Node::ShowList()
{
Node* p=new Node;
p=this;
while (p->next)
{
std::cout<<p->data<<" ";
p=p->next;
}
std::cout<<p->data<<std::endl;
return OK;
}

单链表适用的场景:

1、需要频繁插入和删除时。

2、线性表中的元素个数变化较大或者根本不知道多大时。

C++编程练习(2)----“实现简单的线性表的链式存储结构“的更多相关文章

  1. C++线性表的链式存储结构

    C++实现线性表的链式存储结构: 为了解决顺序存储不足:用线性表另外一种结构-链式存储.在顺序存储结构(数组描述)中,元素的地址是由数学公式决定的,而在链式储存结构中,元素的地址是随机分布的,每个元素 ...

  2. 线性表的链式存储结构的实现及其应用(C/C++实现)

    存档----------- #include <iostream.h> typedef char ElemType; #include "LinkList.h" voi ...

  3. javascript实现数据结构:线性表--线性链表(链式存储结构)

    上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...

  4. C 线性表的链式存储实现及插入、删除等操作示例

    一.链式存储的优势 线性表的存储可以通过顺序存储或链式存储实现,其中顺序存储基于数组实现(见本人上一篇博客),在进行插入删除等操作时,需对表内某一部分元素逐个移动,效率较低.而链式结构不依赖于地址连续 ...

  5. 数据结构-线性表的链式存储相关算法(C语言实现)

    链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...

  6. typedef struct LNode命名结构指针(线性表的链式存储)

    一.typedef 关键字 1. 简介: typedef工具是一个高级数据特性,利用typedef可以为某一些类型自定义名称. 2. 工作原理: 例如我们定义链表的存储结构时,需要定义结点的存储数据元 ...

  7. 线性表 顺序存储 链式存储 ---java实现

    首先抽象出一个线性表抽象类(包括主要的增删操作) public abstract class MyAbstractList<E> { public abstract void add(E ...

  8. 线性表的链式存储——C语言实现

    SeqList.h #ifndef _WBM_LIST_H_ #define _WBM_LIST_H_ typedef void List; typedef void ListNode; //创建并且 ...

  9. 线性表的链式存储C语言版

    #include <stdio.h> #include <malloc.h> #define N 10 typedef struct Node { int data; stru ...

随机推荐

  1. 对position的理解

    作者:zccst 先看看手册 值 描述 absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位. 元素的位置通过 "left", "t ...

  2. STM32 定时器用于外部脉冲计数(转)

    源:STM32 定时器用于外部脉冲计数 STM32 定时器(一)——定时器时间的计算 STM32的定时器是灰常NB的,也是灰常让人头晕的(当然是对于白菜来说的). STM32中的定时器有很多用法: ( ...

  3. php连接mysql数据库(新浪云SAE)

    新浪云提供了免费的创建服务器端应用的服务.网址为:https://www.sinacloud.com/ 在上面创建好应用,然后在本地使用记事本编写应用的代码如下: <?php echo &quo ...

  4. Tsinsen-1487:分配游戏【树状数组】

    首先一定要看到x + y + z = N这个条件,没看到就世界再见了. 赢的人得分需要大于等于2,那么无非就是 (x, y), (x, z), (y, z), (x, y, z) 大于其他的点.但是考 ...

  5. IOS开发-UI学习-使用代码创建button

    使用代码创建button分5个步骤,分别是: 1.定义一个按钮,根据定义位置不同可定义为局部变量或者全局变量: 2.初始化按钮,一般使用一个矩形初始化: 3.设置按钮控件的其他属性,如背景图片,或者背 ...

  6. 内网服务器启动报错UNEXPECTED INCONSISTENCY解决方法

    一开始进入系统显示reboot and select proper boot device or insert boot media in selected boot device and press ...

  7. zepto.js swipe实现触屏tab菜单

    今天我们来说下zepto.js,有兴趣的朋友可以先进这个网站“http://zeptojs.com/” ,这个可以说是手机里的jquery,但是它取消了hover,加上了swipe及tap这两个触屏功 ...

  8. linux下安装openmpi

    之前在win10的bash下折腾很久没有成功,后来经高人指点,发现其实一条命令就行了. sudo apt-get install libopenmpi-dev openmpi-bin 对的,就这一条命 ...

  9. jquery 组合键键盘事件

    jQuery处理键盘事件,比如小说网站中常见的按左右键来实现上一篇文章和下一篇文章,按ctrl+回车实现表单提交,google reader和有道阅读中的全快捷键操作... 本文讲述jQuery处理按 ...

  10. js控制href内容的连接内容的变化

    html: <a data-toggle="modal" href="#myModal_devices" id="check_devices&q ...