1、Definition

Linked list consists of a series of nodes. Each nodes contains the element and a pointer which points to the next node. The last node's next link points to NULL.

Linked=data+pointer

use the pointer to describe the logical relationship

2、Implementation

template<class List_entry>
class List
{public:List(); int size();bool empty();bool full();...protected:int count;Node<List_entry> *head;             //当声明一个linked时,只会拥有一个头指针
}template<class List_entry>
struct Node
{List_entry entry;                            // dataNode<List_entry> *next;               // point to the next node   Node();Node(List_entry, Node<List_entry>*link=NULL);
}

3、Operations

(1)two types of insert

①在p节点所在位置插入

New(S)S->data=a;q->next=S;S->next=p;

②在p节点之后插入

New(S)S->data=a;S->next=p->next;p->next=S;

(2) create a linked list

In order to create a linked list, we have this algorithm

①To create a head

②To create new node S

③Insert S

void CreateList(Head)
{new(Head);Head->next=NULL;scanf("%c",ch);while(ch<>'#')do{new(S);S->data=ch;      S->next=Head->next;Head->next=S;}
}

上述构造方式为从头构造,在头元素出一个一个地插入

下面一种是从链尾增添

void CreateList(Head)
{new(Head);Head->next=NULL;Last=Head;scanf("%c",ch);while(ch<>'#')do{new(S);S->data=ch;S->next=NULL;Last->next=S;Last=S;}
}

(3)insert an element at location i

Status ListInsert L(LinkList &L, int i, DataType e)
{LinkList p, s;p=L;int j=0;while(p&&j<i-1){p=p->next;j++;}if(!p) return ERROR;s=(LinkList)malloc(sizeof(LNode));s->data=e;s->next=p->next;p->next=s;return OK;
}

(4)Delete

Status ListDelete(LinkList &L, int i)
{LinkList p, q;p=L;int j=0;while(p&&j<i-1){p=p->next;j++;}if(!p) return ERROR;q=p->next;p->next=q->next;free(q);
}

(5)Search

①按位查找

Status ListSearch(LinkList &L, int i)
{LinkList p;int j=0;while(p&&j<i-1){p=p->next;   j++;}if(!p)return ERROR;e=p->next;return OK;
}

③按值查找

Status ListSearch(LinkList &L, DataType e)
{LinkList p;p=L;int j=0;while(p&&(p->next)!=e){p=p->next;j++;}if(!p){cout<<"Not found"<<endl;return ERROR;} else{return (j);}
}

3、circular linked list

4、Doubly linked list

(1)Insert

p->next=current->next;
p->prior=current;
current->next->prior=p;
current->next=p;

(2)Delete

current->next->prior=current->prior;
current->prior->next=current->next;

 C++style code

//C++style构建链表,有头结点
//operations
/*
LenList(L)链长
GetElem(i, e)换值
SearchElem(e, i)按值查找
InertElem(i, e)插值
DeleteElem(i) 删值
*/template<typename Type>
struct Node
{Type data;Node<Type>*next;
};template<typename Type>
class LinkList
{
public:LinkList(){head = new Node<Type>;head->next = NULL;len = 0;Type ch;Node<Type>*p;while (cin >> ch){p = new Node<Type>;p->data = ch;p->next = head->next;head->next = p;len++;}}~LinkList(){Node<Type>*p = head;while (p->next){DeleteElem();}delete head;}//LenList(L)链长int LenList(){return len;}//InertElem(e)从尾插值void InsertElem(Type e){Node<Type>*p = head;while (p->next){p = p->next;}Node<Type>*q = new Node<Type>;q->data = e;q->next = p->next;p->next = q;len++;}//InertElem(i, e)从第i位插值void InsertElem(int i, Type e){Node<Type>*p = head;int j = 0;while (p->next && j<i - 1){j++;p = p->next;}Node<Type>*q = new Node<Type>;q->data = e;q->next = p->next;p->next = q;len++;}//GetElem(i, e)换值void GetElem(int i, Type e){int j = 0;Node<Type>*p = head;while (p->next && j<i - 1){j++;p = p->next;}p->next->data = e;}//DeleteElem(i) 第i位删值void DeleteElem(int i){int j = 0;Node<Type>*p = new Node;while (p->next && j<i - 1){j++;p = p->next;}Node<Type>*q = p->next;p->next = q->next;delete q;len--;}//DeleteElem() 尾删值void DeleteElem(){Node<Type>*p = head;while (p->next->next){p = p->next;}Node<Type>*q = p->next;p->next = q->next;delete q;len--;}//SearchElem(e)按值查找int SearchElem(Type e){Node<Type>*p = head;int i = 0;while (p->next && p->data != e){i++;p = p->next;}if (i == 0)return -1;else return i;}//SearchElem(i)按位查找Type SearchElem(int i){Node<Type>*p = head;int j = 0;while (p->next && j<i){j++;p = p->next;}return p->data;}private:Node<Type>*head;int len;
};

  

转载于:https://www.cnblogs.com/KennyRom/p/5879716.html

List------Linked 链表相关推荐

  1. java 集合 接口_Java集合之Collection接口

    1 - Java集合介绍 /* 1. 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储. 2. 另一方面,使用Array存储对象方面具有一些弊 端,而 ...

  2. 一个demo学会c#

    全栈工程师开发手册 (作者:栾鹏) c#教程全解 学习了c#4.5高级编程这本书,自己喜欢边学边总结边写demo,所以写了这篇文章,包含了大部分的c#编程知识.让你一个demo掌握c#编程,如果有问题 ...

  3. java初学者常用单词

    java初学者常用单词 public,公开的 static,静态的 class,类 void,不返回任何值 main,主方法名称 System,系统 String,字符串 args,参数 out,输出 ...

  4. 面向对象大胆向前 Java API 实战

    目录 0:Base API 引言 API的定义和用处 Scanner Number Math Random ThreadLocalRandom Date DateFormat和SimpleDateFo ...

  5. 8:Java Conllections FrameWork-Java API 实战

    目录 1. 原生数组带来的问题,抛出问题 2. Conllections家族 3. 黑帮的帮规 4. ArrayList第一讲 5. ArrayList第二讲 6. ArrayList第三讲 7. L ...

  6. 斐波那契数列的迭代算法和递归算法

    斐波那契数列 斐波那契数列(Fibonacci sequence),又称"黄金分割数列",因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入, ...

  7. LeetCode 92. Reverse Linked List II--Python 解法--反转部分链表--笔试算法题

    题目地址:Reverse Linked List II - LeetCode Reverse a linked list from position m to n. Do it in one-pass ...

  8. LeetCode 142. Linked List Cycle II--单向链表成环的起点--C++,Python解法

    题目地址:Linked List Cycle II - LeetCode Given a linked list, return the node where the cycle begins. If ...

  9. LeetCode 206 Reverse Linked List--反转链表--迭代与递归解法--递归使用一个临时变量,迭代使用3个

    此题链接:Reverse Linked List - LeetCode Reverse a singly linked list. Example: Input: 1->2->3-> ...

  10. 每隔k次反转一次 链表_PTA 5-2 Reversing Linked List (25) [法一] - 线性表 - 链表反转 (PAT 1074)...

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...

最新文章

  1. 强化学习(Reinforcement Learning)是什么?强化学习(Reinforcement Learning)和常规的监督学习以及无监督学习有哪些不同?
  2. Python 技术篇-全局与当前socket超时连接时间设置方法实例演示,查看socket超时连接时间
  3. oracle查询两列合并成一列_MySQL复合索引和单列索引的单表查询分析
  4. 硬核艿艿,新鲜出炉,直接带你弄懂 Spring Boot Jar 启动原理!
  5. freeradius 3.0 mysql_secfree
  6. mybatis关联查询
  7. 生鲜配送小程序源码_生鲜社区团购配送系统小程序源码搭建平台模式
  8. 基于Xilinx FPGA实现PCIE2.0接口
  9. 【转】宝贝,我要出嫁了……
  10. 三年的php简历_php应聘个人简历模板
  11. python回文字符串编程_Python回文字符串及回文数字判定功能示例
  12. 实现支付代付批量转账接口
  13. 2022年陕西省职业院校技能大赛中职组网络安全赛项规程
  14. zzzfun网站连接不上服务器,zzzfun网页版
  15. MySQL数据结构选择的合理性
  16. 【MySQL】MyCAT三大配置文件详解(MySQL专栏启动)
  17. 计算机初级证书 英语怎么说,常见职业资格证书英文翻译(含英语、计算机等)...
  18. 微型计算机的 I3 I5是,i3和i5性能差多少?i3和i5处理器的区别 (全文)
  19. 关于echart没有数据显示暂无数据
  20. centos 7 下双网卡bond 与 trunk口的交换机通信(用作KVM虚拟机)

热门文章

  1. 超图 iServer服务体系学习
  2. ElasticSearch中distinct,count和group by的实现
  3. L1-041 寻找250
  4. js中bind、call、apply函数的用法
  5. 【BZOJ 1036】[ZJOI2008]树的统计Count
  6. Maven本地库在哪?
  7. C#拾遗系列(8):异常
  8. 软件开发依据的标准或法律法规_第178篇丨直真科技:官宣!定制软件开发不应该采用完工百分比法确认收入...
  9. 寻找正反物质世界边境的长城---兵粒子
  10. linux查看usb设备文件,linux – 确定USB设备文件路径