首页 > 其他分享 >线性表

线性表

时间:2023-05-28 18:15:26浏览次数:29  
标签:线性表 int elem length SqList L1

1、线性表:最常用最简单的数据结构,是一个n个数据元素的有限序列。

2、理解重点:顺序存储,任意存取

3、实现线性表前的一些宏定义以及typedef

 1 #define LIST_INIT_SIZE 100//存储空间初始分配量
 2 #define LISTINCREMENT 10//存储空间的分配增量
 3 
 4 #define ERROR 0
 5 #define OK 1
 6 #define TURE 1
 7 #define FALSE 0
 8 
 9 typedef int  ElemType;
10 typedef int Status;

线性表的存储结构

1 typedef struct{
2     ElemType *elem; //存储空间基址
3     int length;//当前长度
4     int listsize;//当前分配的长度
5 }SqList;

4、部分算法。

  1、初始化空表

Status InitList_Sq(SqList *L){
    L->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L->elem)
    {
        exit(1);//这里存储空间分配失败怎么写??异常退出
    }
    L->length = 0;
    L->listsize = LIST_INIT_SIZE;
    return OK;
}

  2、输出线性表

void Output_L(SqList *L)
{
    for(int i = 0;i<L->length;i++)
    {
        printf("%d ",L->elem[i]);
    }
    printf("\n");
}

  3、插入数,参数有插入位置和插入的数(书上的是插入的数的地址)

Status ListInsert_Sq(SqList *L,int i,int e){
    int *newbase;
    int *q;
    int *p;
    if(i < 1  || i > L->length)
    {
        return ERROR;
    }
    if(L->length >= L->listsize)
    {
        newbase = (int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
        if(!newbase)
        {
           exit(1);
        }
        L->elem = newbase;
        L->listsize += LISTINCREMENT;
    }
    q  = &(L->elem[i-1]);
    for(p = &(L->elem[L->length-1]);p >= q; --p)
    {
        *(p+1) = *p;
    }
    *q = e;
    L->length++;
    return OK;
}

  4、删除线性表的一个数,参数给定位置,保存删除的值

Status ListDelete_Sq(SqList *L,int i,ElemType *e)
{
    int *p;
    int *q;
    if(i < 1  || i > L->length)
    {
        return ERROR;
    }
    p = &(L->elem[i-1]);
    *e = *p;
    q = L->elem+L->length-1;//表尾元素位置 //elem其实是数组的名字,数组首地址
    for(++p;p<=q;++p){
        *(p-1) = *p;
    }
    L->length--;
    return OK;
}

  5、查找值,给定值,如果线性表中有就返回位置,如果线性表中没有,就返回0

int LocateElem(SqList *L,ElemType *e)
{
    ElemType *p;
    p = L->elem;
    int i = 1;
    while(i <= L->length){
        if(*e == *p)
        {
            break;
        }
        i++;
        p++;
    }
   // printf("%d\n",i);
    if(i <= L->length)
    {
        return i;
    }
    else{
        return 0;
    }
}

  6、对应主函数

int main()
{
    int j;
    int a=0;
    int *e = (int *)malloc(sizeof(int));
    SqList *L1 = (SqList *)malloc(sizeof(SqList));
    //SqList L1[1];
    InitList_Sq(L1);
    L1->length = 10;
    for(j = 0; j<L1->length; j++)
    {
        L1->elem[j] = j;
    }
    Output_L(L1);

    ElemType LI1 = 8;
    ListInsert_Sq(L1,5,LI1);
    Output_L(L1);

    ListDelete_Sq(L1,5,e);
    Output_L(L1);
    printf("%d\n",*e);
    
    *e =4;
    a= LocateElem(L1,e);
    printf("%d\n",a);
    free(L1->elem);
    free(L1);
    free(e);
    return 0;
}

7、还有两个线性表的操作,后期可能会补。

 

标签:线性表,int,elem,length,SqList,L1
From: https://www.cnblogs.com/gunancheng/p/17438270.html

相关文章

  • Problem E: STL——灵活的线性表
    HomeWebBoardProblemSetStandingStatusStatisticsProblemE:STL——灵活的线性表TimeLimit:1Sec  MemoryLimit:128MBSubmit:5192  Solved:2169[Submit][Status][WebBoard]Description数组和链表是我们熟知的两种线性结构,但是它们不够......
  • 线性表
    顺序表的存、读数据时的时间复杂度为o(1);插入删除时的时间复杂度为o(n);比较适合元素个数不太变化的应用链表的定义structListNode{intval;//结点储存的值ListNode*next;//指向下一个结点的指针ListNode(intx):val(x),next(NULL){}//结点的构造函数};......
  • 学校数据结构实验_线性表:纯C语言版
    首先分别声明链表和顺序表的结构单位,  1:插入实现:顺序表插入比较简单,直接访问下表找到插入位置,然后移动所有后面的数据将插入的位置空出来,然后将需要插入的数据插入,链表的插入:因为一般链表都是调用头插或者尾插,但是为了和顺序表相比较,再插入的时候增加了随机位置......
  • 9. 线性表概念
    线性表1.1概念简介线性表(简称表),是一种抽象的数学概念,是一组元素的序列的抽象,它由有穷个元素组成(0个或任意个)顺序表:使用一大块连续的内存顺序存储表中的元素,这样实现的表称为顺序表,或称连续表在顺序表中,元素的关系使用顺序表的存储顺序自然地表示链接表:在存储空间......
  • 【数据结构】线性表分类以及顺序型存储结构
    1 什么是线性表线性表的定义:由零个或多个数据元素组成的有限序列首先它是一个序列,也就是说元素之间是有先来后到之分。若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。线性表强调是有限的,事实上无论计算机发展到多强大,他所能处理......
  • 逻辑结构之一线性表
    1.线性表的定义线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n=0时是一个空表。若用L命名线性表,则其一般表示为L=(a1,a2,…, ai,ai+1,…,an),式中a1称为表头元素,有且仅有一个直接后继,an称为表尾元素有且仅有一个直接前驱,其他元素有且仅有一个直接后继和一......
  • 数据结构之“线性表(数组)”
    前言:线性表:几个具有相同特性的数据元素的有限序列,线性表在逻辑上是线性结构,也就是连续的一条直线顾名思义“线性表”成一条线的表,在IT领域的数据结构中也有很多能看到的线性表,如“人员花名册”,“网络商品”,“图书名单系统”等等,都是一个个信息紧跟着排好供我们选择浏览等等~但这些......
  • 线性表
    //sqlist/h#ifndef_SQLIST_H_#define_SQLIST_H_typedefintdata_t;#defineN128typedefstruct{data_tdata[N];intlast;}sqlist,*sqlink;sqlinklist_create();intlist_destroy(sqlinkL);intlist_clear(sqlinkL);intlist_empty(sqlink......
  • 线性表之单链表
    定义初始化单链表尾插法建立单链表--正向建立单链表头插法建立单链表单链表的查找按位查找,返回第i个元素(带头结点)按值查找,找到元素值为x的点......
  • 线性表之静态链表实现(数组cur实现)
    main.cpp#include"StaticList.h"intmain(){StaticListSL;InitSList(SL);for(inti=0;i<5;++i){Insert(SL,'A'+i);}ShowSList(SL);DeleteSList(SL);ShowSList(SL);return0;}Stati......