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. java 第五章

    java 第五章   while 循环语句 语法:while(循环条件){ //循环操作 循环条件自加: } while循环结构的特点:先判断,在执行.    while   的执行步骤 (1) 声明 ...

  2. Redis的HelloWorld

    1.安装完成的Redis: linux安装的应用默认会在:usr/local/bin. 1.redis-benchmark:性能测试工具,是redis提供的一个高并发程序,可以在自己本机运行,看看自己 ...

  3. 【未解决】iOS QBImagePickerController访问相册没有取消和确定按钮

    这两天调程序时遇到了这个问题,如图所示: 感觉这问题也是奇葩………… 用系统的 UIImagePickerController 替换后就正常了.看来是 QBImagePickerController ...

  4. 数据类型之Integer与int

    数据类型之Integer与int Java入门  基本数据类型 众所周知,Java是面向对象的语言,一切皆对象.但是为了兼容人类根深蒂固的数据处理习惯,加快常规数据的处理速度,提供了9种基本数据类型, ...

  5. QQ第三方登录逻辑(微信,微博等同)

    实现过程:生成qq扫码登录连接(需要注册,链接里有几个参数需要按照开发文档的格式进行拼接,要后端完成),点击QQ登录按钮,前端Vue发送axios请求,后端收到请求把生成的QQ登录链接发送给vue,v ...

  6. HttpClientFactory 使用说明 及 对 HttpClient 的回顾和对比

    目录 HttpClient 日常使用及坑点: HttpClientFactory 优势: HttpClientFactory 使用方法: 实战用法1:常规用法 1. 在 Startup.cs 中进行注 ...

  7. AUTOSAR学习之RTE - 基本概念

    1.什么是RTE? The Run-Time Environment (RTE) is at the heart of the AUTOSAR ECU architecture. The RTE is ...

  8. 微信公众号接入服务器验证(Go实现)

    1 基本流程 将token.timestamp.nonce三个参数进行字典序排序 将三个参数字符串拼接成一个字符串进行sha1加密 开发者获得加密后的字符串可与signature对比,标识该请求来源于 ...

  9. php sql 类似 mybatis 传参

    PHP sql 处理上,没有类似于 java mybatis 的工具,导致进行一些sql 处理时,会有诸多不便, 楼主抽时间写了一个 php 类似 mybatis 的sql 工具,省去了拼装sql 的 ...

  10. UnityShader之积雪效果

    积雪效果是比较简单的,只需要计算顶点法线方向和世界向上方向之间的点乘,将得到的值与预设的阀值比较,小于阀值为0,用这个值进行插值就OK了 代码: Shader "MyShader/SnowS ...