The Double Linknode for Linear table | Data

简介: The some code in Data book (5th Edition) from the 54 page to 55 page

The some code in Data book (5th Edition) from the 54 page to 55 page

typedef int ElemType;
typedef struct DNode {
    ElemType data; //Data fields
    struct DNode *prior; //Point to the precursor node
    struct DNode *next; //Point to the successor node
}DLinkNode;//Declare the circular DLinknode type

//Create DLinknode using Head-inserting
static void CreateListF(DLinkNode *&L, ElemType a[], int n) { //Reference to pointer
    DLinkNode *s;
    L = (DLinkNode *)malloc(sizeof(DLinkNode)); //Create Head-inserting
    L->prior = L->next = NULL;
    for(int i = 0; i < n; i++) {
        s = (DLinkNode *)malloc(sizeof(DLinkNode)); //Create new node
        s->data = a[i];
        s->next = L->next; //Insert nodes before the original start node, after the head node
        if(L->next != NULL)
            L->next->prior = s;
        L->next = s;
        s->prior = L;
    }
    s = L->next;
    while(s->next != NULL) //Find the end node, which is pointed at by s
        s = s->next;
    s->next = L;
    L->prior = s; //Head-inserting point next domain points to head node
}

//Create DLinknode using Tail-insertion
static void CreateListR(DLinkNode *&L, ElemType a[], int n) {
    DLinkNode *s, *r;
    L = (DLinkNode *)malloc(sizeof(DLinkNode)); //Create Head-inserting
    r = L; //r always point to Tail-insertion
    for(int i = 0; i < n; i++) {
        //Create new node
        s = (DLinkNode *)malloc(sizeof(DLinkNode));
        s->data = a[i];
        r->next = s; //Insert new nodes s after node r
        s->prior = r;
        r = s;
    }
    r->next = NULL; //Tail knot point next domain points to head node
}

//Initialization Linknode
static void InitList(DLinkNode *&L) { //Reference pointer
    L = (DLinkNode *)malloc(sizeof(DLinkNode)); //Create Head-inserting
    L->prior = L->next = L;
}

//Destroyed Linknode
static void DestroyList(DLinkNode *&L) { //Reference pointer
    DLinkNode *pre = L, *p = pre->next;
    while(p != L) {
        free(pre);
        pre = p;
        p = pre->next;
    }
    free(pre);//Release pre
}

//Determine if a linear table is empty
static bool list_empty(DLinkNode *L) {
    return (L->next == L);
}

//Calculation length of the Linknode
static int list_length(DLinkNode *L) {
    int i = 0;
    DLinkNode *p = L;
    while(p->next != L) {
        i++;
        p = p->next; //p point to Tail-inserting
    }
    return i;
}

//Output Linknode
static void display_list(DLinkNode *L)
{
    DLinkNode *p = L->next;
    while(p != L) {
        printf("%c ", p->data);
        p = p->next;
    }
    printf("\n");
}


//Find a data element value
static bool get_elem(DLinkNode *L, int i, ElemType &e)
{
    int j = 1;
    DLinkNode *p = L->next; //p point to first node
    if(i <= 0 || L->next == L) //When i wrong or L is null return false
        return false;
    if(i == 1) {
        e = L->next->data;//Get data
        return true;
    } else {
        while(j <= i - 1 && p != L) { //Find node p for i 
            j++;
            p = p->next;
        }
        if(p == L)
            return false;
        else {
            e = p->data; //Get data
            return true;
        }
    }
}

//Find by element value
static int locate_elem(DLinkNode *L, ElemType e)
{
    int i = 1;
    DLinkNode *p = L->next;
    while(p != NULL && p->data != e) {
        i++;
        p = p->next;
    }
    if(p == NULL) //When node e not exist, return 0
        return 0;
    else //When exist node e of value is 1, return logic number i
        return i;
}
如有侵权,请联系作者删除
目录
相关文章
|
9月前
spring3 springfox报错Type javax.servlet.http.HttpServletRequest not present
spring3 springfox报错Type javax.servlet.http.HttpServletRequest not present
951 0
nfs之mount.nfs: Stale file handle
nfs之mount.nfs: Stale file handle
334 0
JAVA 将一个对象的所有字段值 赋给另一个 对象
JAVA 将一个对象的所有字段值 赋给另一个 对象
927 0
JAVA 将一个对象的所有字段值 赋给另一个 对象
|
定位技术
GIS空间分析 网络分析4服务区分析
在本文中,你将学习到GIS空间分析中网络分析4服务区分析的详细过程
228 0
|
6月前
|
SQL 存储 测试技术
SQL Server 查询超时问题排查
【8月更文挑战第14天】遇到SQL Server查询超时,先检查查询复杂度与索引使用;审视服务器CPU、内存及磁盘I/O负载;审查SQL Server配置与超时设置;检测锁和阻塞状况;最后审查应用代码与网络环境。每步定位问题根源,针对性优化以提升查询效率。务必先行备份并在测试环境验证改动。
456 0
|
9月前
|
网络协议 网络安全
在Windos Server 2016 版本配置网络参数和接入工作组网络
在Windos Server 2016 版本配置网络参数和接入工作组网络
|
9月前
|
Ubuntu Linux 开发工具
【专栏】在Linux上,exa是一个现代化的文件管理系统替代工具,提供直观的文件信息展示。
【4月更文挑战第28天】在Linux上,exa是一个现代化的文件管理系统替代工具,提供直观的文件信息展示。要安装exa,可以在基于Debian的系统(如Ubuntu)上运行`sudo apt install exa`,基于RedHat(如CentOS)的系统运行`sudo yum install exa`,或从源代码编译安装。使用exa的基本命令是`exa`,它列出当前目录的文件和目录。通过选项如`-F`(显示文件类型)、`-h`(人类可读大小)、`-l`(详细信息)和`-s`(排序)可以定制输出。exa还能与其他命令(如grep)结合使用,提升效率。
121 0
|
9月前
|
人工智能 算法
图解:求逆序对数量(归并排序的应用)
图解:求逆序对数量(归并排序的应用)
|
关系型数据库 MySQL Java
halo搭建炫酷个人博客快速部署:docker+docker-compose+nginx(一)
halo搭建炫酷个人博客快速部署:docker+docker-compose+nginx
3527 1
|
SQL 关系型数据库 MySQL
详解MySQL慢SQL定位、分析
1.概述 解决慢SQL的问题无非3步: 定位慢SQL 分析慢SQL 优化慢SQL 本文将按顺序介绍前两步该怎么做,第三步将会在后续的文章中详细讨论。
790 0

热门文章

最新文章