#include <stdio.h>
#include <stdlib.h>

typedef int EmenType;

typedef struct Node {
    int data;
    struct Node *next;

    Node() {
        next = NULL;
    }
} node, *Link;

bool Init(Link head);

bool Insert(Link, int i, EmenType e);

bool Delete(Link p, int i, EmenType &e);

void print(Link p);

void MergeList(Link la, Link lb, Link lc);

int main() {
    Link head;
    head = (Link) malloc(sizeof(node));
    head->next = NULL;
    Init(head);
    Insert(head, 2, 100);
    Link tmp = head;
    print(tmp);
    int a;
    Delete(head, 2, a);
    print(head);
    Link heada = (Link) malloc(sizeof(node));
    Link headb = (Link) malloc(sizeof(node));
    Link headc = (Link) malloc(sizeof(node));
    Init(heada);
    Init(headb);
    MergeList(heada, headb, headc);
    print(headc);
}

void MergeList(Link heada, Link headb, Link headc) {
    headc->data = -1;
    while (heada && headb) {
        if (heada->data <= headb->data) {
            headc->next = heada;
            headc = heada;
            heada = heada->next;
        } else {
            headc->next = headb;
            headc = headb;
            headb = headb->next;
        }
    }
    headc->next = heada ? heada : headb;
    free(headb);
}

void print(Link p) {
    while (p) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

bool Delete(Link p, int i, EmenType &e) {
    int j = 0;
    while (j < i - 1 && p) {
        ++j;
        p = p->next;
    }
    if (!p || j > i - 1) {
        return false;
    }
    Link q = (Link) malloc(sizeof(node));
    q = p->next;
    p->next = q->next;
    e = q->data;
    free(q);
    return true;
}

bool Insert(Link p, int i, EmenType e) {
    int j = 0;
    while (p && j < i - 1) {
        p = p->next;
        j++;
    }
    if (!p || j > i + 1) {
        return false;
    }
    Link s = (Link) malloc(sizeof(node));
    s->data = e;
    s->next = p->next;
    p->next = s;
    return true;
}

bool Init(Link head) {
    bool flag = true;
    Link p = head;
    p->next = NULL;
    for (int i = 0; i < 5; i++) {
        if (flag) {
            p->data = i;
            flag = false;
            continue;
        }
        Link s = (Link) malloc(sizeof(node));
        s->data = i;
        s->next = NULL;
        s->next = p->next;
        p->next = s;
        p = s;
    }
    return true;
}

数据结构C语言顺序表的更多相关文章

  1. 数据结构C语言版 表插入排序 静态表

    数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./*  数据结构C语言版 表插入排序  算法10.3 P267-P270  编译 ...

  2. 【数据结构】之顺序表(Java语言描述)

    之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...

  3. 【数据结构】之顺序表(C语言描述)

    顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...

  4. 五种编程语言解释数据结构与算法——顺序表1(理论与C语言实现)

    1.线性表的分类 2.线性表的定义及其基本操作 2.1.定义:线性表是具有相同类型的n(n>=0)个元素的有序序列,其中n为表长,当n=0时,该表为空表. 2.3.线性表的逻辑结构为: 2.4. ...

  5. 五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)

    7.JavaScript语言实现 7.1.用ES6语法编写顺序表类 //1.创建类 class MyList { //1. initList(&L):初始化表.构造一个空的线性表.放回值应该是 ...

  6. 【C语言--数据结构】线性顺序表

    线性表的本质: 1.线性表(List)是零个或者多个数据元素的集合: 2.线性表中的数据元素之间是有顺序的: 3.线性表中的数据元素个数是有限的: 4.线性表中的数据元素的类型必须相同: 定义: 线性 ...

  7. 五种编程语言解释数据结构与算法——顺序表2(java与C++语言实现)

    5.java实现方式: 5.1.顺序表的抽象结构 package com.xgp.顺序表; public interface MyList<T> { //1. initList(& ...

  8. C++数据结构学习之顺序表

    顺序表是数据结构中最基本也是应用相当广泛的一种数据结构类型.它通常包含三个私有成分,即指向数据数组的头指针.当前表长以及表的实际容量.表的头指针通常指向数据数组的基地址,通过数组的形式进行访问数据数组 ...

  9. 数据结构 单链表&顺序表

    顺序表: 一般使用数组(C语言中的数组采用顺序存储方式.即连续地址存储)来描述. 优点:在于随机访问元素, 缺点:插入和和删除的时候,需要移动大量的元素. 链表: 优点:插入或删除元素时很方便,使用灵 ...

随机推荐

  1. Unity 读写文本 文件

    1. LitJson的使用 https://blog.csdn.net/qq_35669619/article/details/78928966 https://blog.csdn.net/qq_14 ...

  2. Win10系统下,本地连接远程桌面(Win2016)图解

    1.Win+R在运行框中输入mstsc,回车 2.在出现的远程登陆窗口中,计算机中输入远程桌面IP 3.点击显示选项按钮,在远程桌面窗口中,点击常规(默认),输入登陆的用户名: XXXXXX 4.点击 ...

  3. Cocos2dx开发之设计模式

    cocos2dx的几种常见设计模式 一 单例模式 Cocos2dx中的单例有:CCDirector,CCTextureCache,CCSpriteFrameCache,CCScriptEngineMa ...

  4. adduser与useradd的区别

    问题:使用 useradd 创建用户,发现 /home 目录下没有自动创建关于用户的目录.所以做了一番调查研究 useradd是一个linux命令,但是它提供了很多参数在用户使用的时候根据自己的需要进 ...

  5. windows server 2012 远程桌面不好使

    下面的文章里讲的比较详细 http://www.hfkehu.cn/thread-4382-1-1.html 我遇到的问题是第一种,因为是刚装的机器,刚连上网时,选择如下设置时,因为鼠标一点别的地方, ...

  6. 获取txt md5值上传文件完整性校验

    网络上传文件到服务器 做md5 校对.判断文件是否破坏 首先求txt文件的md5值 ,1万条数据 求出的值 文件MD5:e5467b6a8e3c26af8c5af0bda3739280 服务器处理程序 ...

  7. net_device 内核中是如何组织的

    下边函数实现将新的 net_device 设备插入到内核链表中工作 /* * Device list insertion */ static void list_netdevice(struct ne ...

  8. 一年web网站测试总结

    1. 页面链接检查 每一个链接是否都有对应的页面,并且页面之间切换正确.可以使用一些工具,如LinkBotPro.File-AIDCS.HTML Link Validater.Xenu等工具.Link ...

  9. Windows上Kafka运行环境安装

    1. 安装JDK 1.1 安装文件:http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载JDK1.2 安装完成后需 ...

  10. 《Miracle_House》团队项目系统设计改进

    一.团队项目系统设计改进: 1.分析项目系统设计说明书初稿的不足,特别是软件系统结构模型建模不完善内容: 对于原文档中,设计图中存在的错误以及文字描述不准确的地方进行了修改. 2. 团队项目Githu ...