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. linux初学者-ftp篇(一)

    linux初学者-ftp篇(一) FTP是文件传输协议,是用于Internet上的控制文件的双向传输.用户可以通过客户机程序从远程主机上下载或者向远程主机上传文件. linux系统中,如果不了解SEL ...

  2. django第二次 (转自刘江)

    除了我们前面说过的普通类型字段,Django还定义了一组关系类型字段,用来表示模型与模型之间的关系. 一.多对一(ForeignKey) 多对一的关系,通常被称为外键.外键字段类的定义如下: clas ...

  3. java oop 单列 双列 集合, 迭代器 的使用和说明

    一.集合(Collection) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组 而数组的长度固定, ...

  4. 基于Spark Grahpx+Neo4j 实现用户社群发现

    上一篇文章知识图谱在大数据中的应用我们介绍了知识图谱的一些概念和应用场景,今天我们就来看一个具体的应用案例了解下知识图谱的应用.用户增长对于一个APP的生存起到了至关重要的作用,没有持续的用户增长,再 ...

  5. 破解EFCore扩展Dll --- Z.EntityFramework.Extensions.EFCore

    安装 Z.EntityFramework.Extensions.EFCore Install-Package Z.EntityFramework.Extensions.EFCore -Version ...

  6. 学习vue感触

    大学还没毕业,想着先找工作,感觉计算机专业在老家做没有太大的发展,于是就在大学所在城市找了份工作.来到公司的第一天,带我的师傅让我学习vue.之前完全没有接触过框架,而且专业知识比较薄弱,前几天一直处 ...

  7. NLP(十四)自制序列标注平台

    背景介绍   在平时的NLP任务中,我们经常用到命名实体识别(NER),常用的识别实体类型为人名.地名.组织机构名,但是我们往往也会有识别其它实体的需求,比如时间.品牌名等.在利用算法做实体识别的时候 ...

  8. django报错信息解决方法

    You have 17 unapplied migration(s). Your project may not work properly until you apply the migration ...

  9. 【KakaJSON手册】01_JSON转Model_01_基本用法

    在iOS开发中,后台返回的数据大多是JSON格式,对应地会被网络框架层解析成Swift中的Dictionary.Array.由于数据类型的复杂.字段的繁多,直接使用Dictionary.Array会比 ...

  10. Javascript中将数字转换为中文的方法

    //js实现将数字1234转化为汉字字符串(一千二百三十四)(或大写汉字壹仟贰佰叁拾肆): /*阿拉伯数字转中文数字 中文数字的特点: 每个计数数字都跟着一个权位,权位有:十.百.千.万.亿. 以“万 ...