第三篇、双向链表(循环链表)

简介:

  在用C/C++开发系统中,我们知道用数组或者单链表来开发,如果是数据比较大的话,性能很不好,效率也不高。因此常常需要考虑系统的实用性,常常采用双向链表来开发。

示例:

1.数据

typedef struct node{

  int data;                // 数据

  struct node *last;  // 前一个数据节点 

  struct node *next;  // 后一个数据节点

}Node;

typedef struct {

  Node *head;

  Node *tail;

}LinkList;

2.创建链表

LinkList *createList()
{
    LinkList *list = malloc(sizeof(LinkList));
    list -> head = NULL;
    lsit ->tail = NULL;
    return list;
}

3.插入

3.1头插法

void addNodeBeHead(LinkList *list,int num)
{
    Node *p = malloc(sizeof(Node));
    p -> data = num;
    p -> last = NULL;
    P -> next = NULL;

    if(list - > head != NULL)
    {
        // 1.指向新的节点
      // 2.新节点的next指向原来的节点
        // 3.新节点变成头节点
        list ->head->last = p;
        node ->next = list ->head;
        list -> head = p;
    }
    else{
        list -> head = P;
        list -> tail = p;
    }
}

3.2尾插法

void addNodeAfterTail(LinkList *list,int num)
{
    Node *p = malloc(sizeof(Node));
    p -> data = num;
    p -> last = NULL;
    P -> next = NULL;

    if(list - > head != NULL)
    {
        // 1.指向新的节点
      // 2.新节点的last指向原来的节点
      // 3.新节点变成尾节点
      list ->tail->next = p;
        node ->last = list -> tail;
        list -> tail = p;
    }
    else{
        list -> head = P;
        list -> tail = p;
    }
}

4.打印链表

void printList(LinkList *list)
{
    Node *p = list -> head;
    if(p == NULL)
    {
        printf("当前为空链表");
    }else
    {
        while(p != NULL)
        {
                printf("%s",p-> data);
                p = p-> next;
        }

    }
}
时间: 2024-07-29 03:44:29

第三篇、双向链表(循环链表)的相关文章

JS数据结构第三篇---双向链表和循环链表

一.双向链表 在上文<JS数据结构第二篇---链表>中描述的是单向链表.单向链表是指每个节点都存有指向下一个节点的地址,双向链表则是在单向链表的基础上,给每个节点增加一个指向上一个节点的地址.然后头结点的上一个节点,和尾结点的下一个节点都指向null.同时LinkedList类中再增加一个last内部属性,一直指向链表中最后一个节点.结构模拟如图: 同样对外暴露的方法和单向链表一样,只是内部实现稍有变化 双向链表完整设计代码: /** * 自定义双向链表:对外公开的方法有 * append(e

HttpApplication处理对象与HttpModule处理模块 (第三篇)

一.HttpApplication对象简述 在HttpRuntime创建了HttpContext对象之后,HttpRuntime将随后创建一个用于处理请求的对象,这个对象的类型为HttpApplication. HttpRuntime管理一个定义在System.Web命名空间下的HttpApplicationFactory类的时候,HttpApplicationFactory通过工厂模式管理HttpApplication对象.在HttpApplicationFactory内部维护了一个HttpA

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.

SylixOS ARM BSP 第三篇【bspInit.c】

此篇博客为 SylixOS ARM BSP 编写连载的第三篇,主要介绍 bspInit.c 文件具体实现. bspInit.c 为 BSP 操作系统初始化部分代码,通常由 startup.S 初始完基本处理器参数后调用,下面以 S3C2440A 处理器为例,逐块介绍 bspInit.c 代码. SylixOS ARM BSP 第二篇中提到 startup.S 初始化完成会将会调用 bspInit() 函数,此函数用于初始化操作系统,并开始多任务调度. int bspInit (void) {  

谷歌的三篇论文

传说中的谷歌三篇论文 MapReduce: Simpli?ed Data Processing on Large Clusters The Google file system Bigtable: A Distributed Storage System for Structured Data 谷歌学术立搜可下,每日潜心研习,假以时日,便可大成.

认识元数据和IL(上) &lt;第三篇&gt;

说在,开篇之前 很早就有说说Metadata(元数据)和IL(中间语言)的想法了,一直在这篇开始才算脚踏实地的对这两个阶级兄弟投去些细关怀,虽然来得没有<第一回:恩怨情仇:is和as>那么迅速,但是Metadata和IL却是绝对重量级的内容,值得我们在任何时间关注,本文就是开始. 1 引言 你可曾想到,我们的C#代码,编译之后究竟为何物?你可曾认知,我们的可执行程序,运行之时的轨迹究竟为哪般?那么,本文通过对Metadata(元数据)和IL(Intermediate Language, 中间语

编写小游戏《贪头蛇》第三篇

源码下载地址:http://download.csdn.net/detail/oyangyufu/7492917 点击NEW GAME按钮,进入游戏主场景 代码: 游戏背景 layer = (CCLayer*)this->getChildren()->objectAtIndex(SnakeConstants::LAYER_BACKGROUND); layer->setTouchEnabled(false); //游戏背景 CCSize size = CCDirector::sharedD

ORA-38760: This database instance failed to turn on flashback database 第三篇

ORA-38760: This database instance failed to turn on flashback database  第三篇 第一篇 第二篇 问题现象: 在数据库alert告警日志中看见例如以下信息: Completed: ALTER DATABASE MOUNT Wed Nov 19 04:57:28 2014 alter database open Errors in file /DBSoft/diag/rdbms/woo/woo/trace/woo_ora_593

第三篇 读后感

      今天读了大道至简中的第三篇关于团队缺乏的不只是管理的文章,其中作者引用了<汉书>中的“言人三人众”,来说明团队是至少以三个人为规模的,而三人构成的团队,这样便具备了团队的一些基本特征:主从.监督和责任.团队并不是个体能够组成的,两个人同样不能成为一个团队,两人则互相支撑,正如古文中“从”字是二人互立的,并没有监督.老师课上所说的一个和尚有水喝,两个和尚抬水喝,三个和尚没水喝的故事,三个和尚之所以没水喝是因为没有能够的安排没有领导人,三个人本能比一个人有更高的效率,正如文中所说的的一

学习KnockOut第三篇之List

欲看此篇---------------------------------------------可先看上篇. 第一步,先搭建一个大概的框架起来.至于绑定什么的,我们稍后慢慢进行.可能会有人问为什么我那个位置要写一个form,关于这个呢,且埋一伏笔,稍后说明原由. 我们要做的是,当点击“Add”按钮时能将文本框里的值加入的下拉框里,当我们选中下拉框里的选项时点击"Remove"也能进行删除操作,同样,当点击“Sort”时也能对下拉框里的选项进行排序.有代码和图: 1 <!DOCT