C++编程练习(2)----“实现简单的线性表的链式存储结构“
单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素。
对于查找操作,单链表的时间复杂度为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)----“实现简单的线性表的链式存储结构“的更多相关文章
- C++线性表的链式存储结构
C++实现线性表的链式存储结构: 为了解决顺序存储不足:用线性表另外一种结构-链式存储.在顺序存储结构(数组描述)中,元素的地址是由数学公式决定的,而在链式储存结构中,元素的地址是随机分布的,每个元素 ...
- 线性表的链式存储结构的实现及其应用(C/C++实现)
存档----------- #include <iostream.h> typedef char ElemType; #include "LinkList.h" voi ...
- javascript实现数据结构:线性表--线性链表(链式存储结构)
上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...
- C 线性表的链式存储实现及插入、删除等操作示例
一.链式存储的优势 线性表的存储可以通过顺序存储或链式存储实现,其中顺序存储基于数组实现(见本人上一篇博客),在进行插入删除等操作时,需对表内某一部分元素逐个移动,效率较低.而链式结构不依赖于地址连续 ...
- 数据结构-线性表的链式存储相关算法(C语言实现)
链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...
- typedef struct LNode命名结构指针(线性表的链式存储)
一.typedef 关键字 1. 简介: typedef工具是一个高级数据特性,利用typedef可以为某一些类型自定义名称. 2. 工作原理: 例如我们定义链表的存储结构时,需要定义结点的存储数据元 ...
- 线性表 顺序存储 链式存储 ---java实现
首先抽象出一个线性表抽象类(包括主要的增删操作) public abstract class MyAbstractList<E> { public abstract void add(E ...
- 线性表的链式存储——C语言实现
SeqList.h #ifndef _WBM_LIST_H_ #define _WBM_LIST_H_ typedef void List; typedef void ListNode; //创建并且 ...
- 线性表的链式存储C语言版
#include <stdio.h> #include <malloc.h> #define N 10 typedef struct Node { int data; stru ...
随机推荐
- 搭建firefly服务端遇到的问题
1 pylinter pylinter could not automatically determined the path to "lint.py" 这个错误通过安装pylin ...
- Linux 分区和目录
[1. 分区与目录概念理解] Linux的分区是物理上的概念,就像我们把一块硬盘分成C:,D:,E:三个区一样,物理上将存储空间分开 Linux的目录是逻辑上的概念,Linux的目录树实际上是一个分 ...
- (中等) POJ 3280 Cheapest Palindrome,DP。
Description Keeping track of all the cows can be a tricky task so Farmer John has installed a system ...
- Arduino单片机使用和开发问题记录(转)
源:Arduino单片机使用和开发问题记录 1.将程序上传到板子时Arduino IDE提示“avrdude: stk500_getsync(): not in sync: resp=0x00” 网上 ...
- php中使用mysql_fetch_array输出数组至页面中展示
用的是CI框架,很好的MVC结构 在Model层 public function showProteinCategory(){ $sql = "SELECT DISTINCT protein ...
- Seajs是什么及其优缺点&如何使用?
这篇文章主要介绍了Seajs的相关知识和和学习心得,适合刚接触SeaJS的同学,需要的朋友可以参考下,有更好的新手教程或文档,欢迎推荐.分享! 1.Seajs简介 Seajs,一个Web模块加载框 ...
- Mac搭建Hadoop源码阅读环境
1.本次Hadoop源码阅读环境使用的阅读工具是idea,Hadoop版本是2.7.3.需要安装的工具包括idea.jdk.maven.protobuf等 2.jdk,使用的版本是1.8版,在jdk官 ...
- Cdoefroces #354
A题 题意:给定一些数,然后求一次交换以后最大的数和最小的数之间的最大距离 分析:找到最大数和最小数的位置,然后判断是把位置大的移到最后还是把位置小的移到开始位置即可 #include <ios ...
- ubuntu apache2 ssl配置
Ubuntu下HTTPS配置非常简单,对大部分用户而言,使用普通的自签名证书,只需按照步骤进行就可以了,无需了解密钥.证书的更多知识,更深的背景 知识还有RSA算法.DES算法.X509规范.CA机构 ...
- ECSHOP中ajax的调用原理
ECSHOP中ajax的调用原理 ecshop中ajax的调用原理. 1.首先ecshop是如何定义ajax对象的. ecshop中的ajax对象是在js/transport.js文件中定义的.里面是 ...