linearList.h

#ifndef _INC_STDIO_8787
#define _INC_STDIO_8787
#include <stdio.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100    // 线性表存储空间的初始分配量
#define LIST_INCREMENT 10    // 线性表存储空间的分配增量

typedef int ElemType;        // 数据元素的类型

typedef struct {
    ElemType *elem;    // 存储空间的集地址
    int length;        // 当前线性表的长度
    int listsize;    // 当前分配的存储容量
} LinearList;

int init_list(LinearList *list);    //初始化线性表

void clear_list(LinearList *list);

void destroy_list(LinearList* list);

int list_empty(LinearList* list);

int list_length(LinearList* list);

void print_list(LinearList* list);

int locate_elem(LinearList* list, ElemType* x);

int prior_elem(LinearList* list, ElemType* cur_elem, ElemType* pre_elem);

int get_elem(LinearList* list, int index, ElemType* e);

int next_elem(LinearList* list, ElemType* cur_elem, ElemType* next_elem);

int insert_elem(LinearList* list, int index, ElemType* e);

int delete_elem(LinearList* list, int index, ElemType* e);

int append_elem(LinearList* list,ElemType* e);

int pop_elem(LinearList* list, ElemType* e);

void union_list(LinearList* list_a, LinearList* list_b, LinearList* list_c);

void intersect_list(LinearList* list_a, LinearList* list_b, LinearList* list_c);

void except_list(LinearList* list_a,LinearList* list_b, LinearList* list_c);
#endif

linearList.c

#include "linearList.h"

int init_list(LinearList *list)
{
    list->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if (!list->elem)
    {
        ;
    }
    list->length = ;
    list->listsize = LIST_INIT_SIZE;
    ;
}

void clear_list(LinearList *list)
{
    list->length = ;
}

void destroy_list(LinearList* list)
{
    free(list);
}

int list_empty(LinearList* list)
{
    );
}

int list_length(LinearList* list)
{
    return list->length;
}

int locate_elem(LinearList* list, ElemType* x)
{
    ;
    int i;
    ; i < list->length; i++)
    {
        if (list->elem[i] == *x)
        {
            pos = i;
        }
    }
    return pos;
}

int prior_elem(LinearList* list, ElemType* cur_elem, ElemType* pre_elem)
{
    ;
    pos = locate_elem(list, cur_elem);
    )
    {
        ;
    }
    *pre_elem = list->elem[pos-];
    ;
}

int insert_elem(LinearList* list, int index, ElemType* e)
{
    ElemType *q, *p;
     || index >= list->length)
    {
        ;
    }
    if (list->length >= list->listsize)
    {
        ElemType *newbase = (ElemType*)realloc(list->elem, (list->listsize + LIST_INCREMENT)*sizeof(ElemType));
        if (!newbase)
        {
            ;
        }
        list->elem = newbase;
        list->listsize += LIST_INCREMENT;
    }
    q = &(list->elem[index]);
    ]); p >= q; p--)
    {
        *(p+) = *p;
    }
    *q = *e;
    ++list->length;
    ;
}

int append_elem(LinearList* list,ElemType* e)
{
    if (list->length >= list->listsize)
    {
        ElemType *newbase = (ElemType*)realloc(list->elem, (list->listsize + LIST_INCREMENT)*sizeof(int));
        if (!newbase)
        {
            ;
        }
        list->elem = newbase;
        list->listsize += LIST_INCREMENT;
    }
    list->elem[list->length] = *e;
    ++list->length;
    ;
}

void print_list(LinearList* list){
    int i;
    ; i < list->length; i++){
        printf("%d \n", list->elem[i]);
    }
}

int get_elem(LinearList* list, int index, ElemType* e){
     || index >= list->length) ;
    *e = list->elem[index];
    ;
}

int next_elem(LinearList* list, ElemType* cur_elem, ElemType* next_elem){
    ;
    pos = locate_elem(list, cur_elem);
     || pos == (list->length - )) ;
    *next_elem = list->elem[pos+];
    ;
}

int delete_elem(LinearList* list, int index, ElemType* e)
{
    ElemType *q, *p;
     || index >= list->length)
    {
        ;
    }
    p = &(list->elem[index]);
    *e = *p;
    q = list->elem + list->length -;
    for (++p; p < q; ++p)
    {
        *(p - ) = *p;
    }
    --list->length;
    ;
}

int pop_elem(LinearList* list, ElemType* e){
    ;
    *e = list->elem[list->length - ];
    --list->length;
    ;
}

void union_list(LinearList* list_a, LinearList* list_b, LinearList* list_c){ //并集,C=A∪B
    int i,a_length,b_length;
    ElemType elem;
    a_length = list_length(list_a);
    b_length = list_length(list_b);
    ;i<a_length;i++){
        get_elem(list_a, i, &elem);
        append_elem(list_c,&elem);
    }
    ;i<b_length;i++){
        get_elem(list_b, i, &elem);
        ){
            append_elem(list_c,&elem);
        }
    }
}

void intersect_list(LinearList* list_a, LinearList* list_b, LinearList* list_c){ //交集,C=A∩B
    int i,a_length;
    ElemType elem;
    a_length = list_length(list_a);
    ;i<a_length;i++){
        get_elem(list_a, i, &elem);
        ){
            append_elem(list_c,&elem);
        }
    }
}

void except_list(LinearList* list_a,LinearList* list_b, LinearList* list_c){ //差集,C=A-B(属于A而不属于B)
    int i,a_length;
    ElemType elem;
    a_length = list_length(list_a);
    ;i<a_length;i++){
        get_elem(list_a, i, &elem);
        ){
            append_elem(list_c,&elem);
        }
    }
}

index.c

#include "linearList.h"
void main() {
    int i;
    ElemType elem;
    LinearList *list_a = (LinearList *)malloc(sizeof(LinearList));
    LinearList *list_b = (LinearList *)malloc(sizeof(LinearList));
    LinearList *list_c = (LinearList *)malloc(sizeof(LinearList));
    init_list(list_a);
    init_list(list_b);
    init_list(list_c);

    ; i < ; i++){
        append_elem(list_a,&i);
    }

    ; i < ; i+=){
        append_elem(list_b,&i);
    }
    print_list(list_a);
    print_list(list_b);

    pop_elem(list_a, &elem);
    print_list(list_a);
    printf("pop: %d \n",elem);

    delete_elem(list_a, , &elem);
    print_list(list_a);
    printf("delete: %d \n",elem);

    insert_elem(list_a, , &elem);
    printf("insert: %d \n",elem);
    print_list(list_a);

    get_elem(list_a, , &elem);
    printf("get elem at 5: %d \n",elem);

    printf("locate : elem %d at %d \n",elem,locate_elem(list_a,&elem));

    printf("list_a length : %d \n",list_length(list_a));

    print_list(list_a);
    print_list(list_b);

    union_list(list_a,list_b,list_c);
    print_list(list_c);
    clear_list(list_c);

    intersect_list(list_a,list_b,list_c);
    print_list(list_c);
    clear_list(list_c);

    except_list(list_a,list_b,list_c);
    print_list(list_c);

    destroy_list(list_a);
    destroy_list(list_b);
    destroy_list(list_c);
}

数据结构C线性表现实的更多相关文章

  1. 用C#学习数据结构之线性表

    什么是线性表 线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract),线性结构的特点是结构中的数据元素之间存在一对一的线性关系.这种一对一的关系指的是数据元素之间的位置关 ...

  2. 数据结构之线性表(python版)

    数据结构之线性表(python版) 单链表 1.1  定义表节点 # 定义表节点 class LNode(): def __init__(self,elem,next = None): self.el ...

  3. C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作

    1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...

  4. 【PHP数据结构】线性表?顺序表?链表?别再傻傻分不清楚

    遵从所有教材以及各类数据结构相关的书书籍,我们先从线性表开始入门.今天这篇文章更偏概念,是关于有线性表的一个知识点的汇总. 上文说过,物理结构是用于确定数据以何种方式存储的.其他的数据结构(树.图). ...

  5. javascript实现数据结构:线性表--简单示例及线性表的顺序表示和实现

    线性表(linear list)是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列.在稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成. 其中: 数据元素的个数n定义为 ...

  6. javascript实现数据结构:线性表--线性链表(链式存储结构)

    上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...

  7. Java数据结构之线性表(2)

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  8. Java数据结构之线性表

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  9. C 数据结构1——线性表分析(顺序存储、链式存储)

    之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug ...

随机推荐

  1. [译].Net中的内存

    原文链接:https://jonskeet.uk/csharp/memory.html 人们在理解值类型和引用类型之间的差异时因为“值类型在栈上分配,引用类型在堆上分配”这句话造成了很多混乱.这完全是 ...

  2. 【Maven】Mac 使用 zsh 后 mvn 命令就无效

    RT -- 解决方法: 打开 .zshrc 文件,将 Maven 环境变量配置加入其中,或者 将 source ~/.bash_profile 添加到 .zshrc 中. PS: 之前搞不懂,每次使用 ...

  3. Eclipse Other Projects小问题

    Eclipse 不知什么时候多了个 "Other Projects" 文件夹,所有的项目又多了一层目录,如图所示: 虽然对功能没任何影响,但每次打开有些麻烦,多少感觉有些不爽…… ...

  4. PID算法通俗理解,平衡车,倒立摆,适合不理解PID算法的人来看!

    先插句广告,本人QQ522414928,不熟悉PID算法的可以一起交流学习,随时在线(PID资料再我的另一篇博客里) 倒立摆资料连接↓ https://www.cnblogs.com/LiuXinyu ...

  5. MySQL-5.7.21非图形化下载、安装、连接问题记录

    1.安装包下载链接:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-winx64.zip 官网:https://www.mysql.co ...

  6. oracle RAC LOG_ARCHIVE_DEST_1 与 LOG_ARCHIVE_DEST 冲突解决

    在做 oracle RAC 归档日志配置时,出现了一个错误,开始看资料的时候, 注意到了 LOG_ARCHIVE_DEST_n 与 LOG_ARCHIVE_DEST 不能同时使用, 但在配置的时候并没 ...

  7. oracle 断电启动失败:ORA-00600: internal error code, arguments

    转载地址: http://www.2cto.com/database/201312/261602.html 由于服务器断电,启动 oracle 时报 ORA-00600 错误 查看 oracle tr ...

  8. hadoop安装解决之道

    # 壹.故障现象 ```xml Microsoft Windows [版本 10.0.18362.239] (c) 2019 Microsoft Corporation.保留所有权利. C:\User ...

  9. js 数组对象深拷贝

    js 数组对象深拷贝 结论:对象的拷贝不能采用直接赋值的方式. 背景 踩过的坑如下: formData本来是父组件传过来的,但是我不想直接用,于是我直接赋值给一个formDataCopy的对象. 但是 ...

  10. C++这么难,为什么还要学习C++呢?如何学?

    在大多数开发或者准开发人员的认识中,C/C++ 是一门非常难的编程语言,很多人知道它的强大,但因为认为“难”造成的恐惧让很多人放弃. 这个世界本来就是残酷的,所以你不能怪C++向你展示了世界的本质 大 ...