线性表之顺序表(代码片段)

zuixime0515 zuixime0515     2022-12-29     538

关键词:

线性表的结构体定义:

#define MaxSize 100

typedef struct 
    int data[MaxSize];
    int length;
Sqlist;

  顺序表在内存中以数组形式保存,是一组连续的内存空间。

顺序表基本算法:

构造一个空的线性表:

//初始化线性表
STATUS InitList(Sqlist &L) 
    //置表长为0
    L.length = 0;
    return OK;

返回指定元素位置:

//定义返回线性表中某个元素的位置i
int LocateElem(Sqlist L, int x) 
    
    int i;
    for (i = 0; i < L.length; i++) 
        if (x < L.data[i])
            //返回元素位置
            return i;
    
    //没有元素比x大,则应该是第一个位置
    return i;

创建一个线性表:

//创建线性表
STATUS CreateList(Sqlist &L, int data[], int size) 
    if (size > MaxSize)
        return ERROR;

    int i = 0;
    for (i = 0; i < size; i++) 
        L.data[i] = data[i];
    
    L.length = size;
    return OK;

插入一个元素(假设线性表中元素已升序排序)

//插入x后移动相应的元素位置,假设插入总能成功
STATUS InsertElem(Sqlist &L, int x) 

    int positionOfX, i;
    int sum = L.length;
    positionOfX = LocateElem(L, x);

    for (i = L.length - 1; i >= positionOfX; i--) 
        L.data[i+1] = L.data[i];
    
    L.data[positionOfX] = x;
    L.length++;

    //判断是否插入成功
    if (L.length > sum) 
        return OK;
    
    else
        return ERROR;

删除指定位置的元素:

//删除指定位置的元素,并将删除元素返回
int DeleteElemAtPos(Sqlist &L, int p) 
    if (p<0 || p>L.length-1)
        return ERROR;

    int result = L.data[p];
    int i;
    //注意是i<L.length-1,而不是<L.length
    for (i = p; i < L.length-1; i++) 
        L.data[i] = L.data[i + 1];
    
    --L.length;
    return result;

在指定位置插入元素:

//在指定位置p插入元素
STATUS InsertElemAtPos(Sqlist &L, int p, int x) 
    if (p<0 || p>L.length || L.length == MaxSize)
        return ERROR;

    int i = 0;
    for (i = L.length - 1; i >= p; i--) 
        L.data[i + 1] = L.data[i];

    
    L.data[p] = x;
    L.length++;
    return OK;

给线性表元素升序排序(可使用多种排序算法,本文使用冒泡):

//给线性表排序
STATUS SortList(Sqlist &L) 
    int i, j;
    int temp = 0;
    for(i=L.length-1;i>=1;i--)
        for (j = 0; j <= i-1; j++) 
            if (L.data[j] > L.data[j + 1]) 
                temp = L.data[j];
                L.data[j] = L.data[j + 1];
                L.data[j + 1] = temp;
            
        
    return OK;

 

 

测试代码:

int main()

    //创建一个新表
    Sqlist *A;
    A = (Sqlist*)malloc(sizeof(Sqlist));

    cout << "Initial Sqlist" << endl;
    InitList(*A);
    cout << "A的长度 " << A->length << endl << endl;

    int data[5] =  1,3,2,3,5 ;
    CreateList(*A, data, 5);
    cout << "length of A is " << A->length << endl;
    cout << "初始化后的线性表A是:" << endl;
    PrintList(*A);
    cout << endl;

    cout << "给线性表排序之后是:" << endl;
    SortList(*A);
    PrintList(*A);
    cout << endl;

    cout << "插入一个元素后的列表" << endl;
    InsertElem(*A, 2);
    PrintList(*A);
    cout << "length of A is :" << A->length << endl << endl;

    cout << "插入元素0" << endl;
    InsertElem(*A, 0);
    PrintList(*A);
    cout << "length of A is " << A->length << endl << endl;

    cout << "after Delete elem 3 " << endl ;
    DeleteElemAtPos(*A, LocateElem(*A, 3));
    PrintList(*A);
    cout << "length of A is " << A->length << endl;

    //解决显示窗口一显而过
    system("pause");
    return 0;

 

02线性表之顺序表(代码片段)

肚子饿了就要吃  ~  嗝 ———路飞 目录1.本章重点2.线性表3.顺序表实现3.1顺序表的概念及结构4.静态顺序表5.动态顺序表 5.1“增”尾插:头插:5.2“删”尾删头删5.3随机“插入”5.4随机“删除”5.5内存销毁5.6“改”5... 查看详情

线性表之顺序存储结构(顺序表)(代码片段)

目录1.线性表2.顺序存储结构(顺序表)2.1顺序表一般可以分为: 1.静态顺序表:使用定长数组存储元素 1.1静态顺序表:顺序表的大小是确定的,容量是固定的.    结论:静态顺序表不是很常量,了解就行.2.动态顺序表:... 查看详情

数据结构学习总结线性表之顺序表(代码片段)

...dquo;一对一”逻辑关系的数据,最佳的存储方式是使用线性表。那么,什么是线性表呢?线性表,全名为线性存储结构。使用线性表存储数据的方式可以这样理解,即“把所有数据用一根线儿串起来,再存储到物理空间中&r... 查看详情

数据结构线性表之顺序表arraylist(代码片段)

...在了解顺序表之前,需要先了解什么是顺序表?顺序表是线性表的一种,线性表分为顺序表和链表。其中顺序表在java中又分为数组(最简单的顺序表)和ArrayList。为什么我们称其为顺序表呢?原因顾名思义是该数据结构在逻辑... 查看详情

线性表之栈(代码片段)

栈的定义:  一种只能在一端进行插入或删除操作的线性表被称为栈,其中允许删除或插入的一端为栈顶,另一端为栈底,栈底固定不变;  栈的特点:先进后出,例如弹夹,先装的子弹最后才能出;  按照存储结构可以... 查看详情

数据结构线性表之实现单链表(代码片段)

数据结构线性表之实现单链表数据结构线性表之实现单链表相关文章单链表定义单链表相关操作数据结构线性表之实现单链表相关文章数据结构线性表之概念(一)数据结构线性表之抽象基类(二)数据结构线性表之实现顺序表(三)数... 查看详情

线性表之单链表(代码片段)

在学完线性表之后,总结一下顺序表的优缺点优点无须为元素之间的逻辑结构增添额外的储存空间,自成一体。随机存取,十分方便。缺点空间利用率不高,容易造成“碎片”。插入删除操作需要移动大量的元素。当线性... 查看详情

数据结构之线性表之顺序存储java实现(代码片段)

文章目录线性表的定义线性表的基本运算线性表的存储之顺序存储定义线性表添加元素查找元素删除元素打印线性表实现的完整代码测试一下线性表的定义线性表的逻辑特征:①有且仅有一个称为开始元素的a1,她没有前... 查看详情

03线性表之链表(代码片段)

肚子饿了就要吃  ~  嗝 ———路飞 1.本章重点链表表示和实现(单链表+双链表)链表的常见OJ题顺序表和链表的区别和联系2.为什么需要链表引子:顺序表的问题及思考(1)动态顺序表特点:插入数据,... 查看详情

数据结构线性表之实现单循环链表(代码片段)

数据结构线性表之实现单循环链表数据结构线性表之实现单循环链表相关文章单循环链表单循环链表定义数据结构线性表之实现单循环链表相关文章数据结构线性表之概念(一)数据结构线性表之抽象基类(二)数据结构线性表之实... 查看详情

线性表之顺序存储-顺序表(代码片段)

顺序表的操作[x]向有序顺序表插入一个元素[x]顺序表的冒泡排序[x]顺序表的删除操作[x]顺序表中元素的查找[x]顺序表的逆置[x]删除顺序表中的相同元素[x]向顺序表的指定位置插入元素[x]打印顺序表顺序表的存储结构#definemaxsize100/... 查看详情

数据结构——线性表之顺序表篇(代码片段)

...码顺序表小结前言在介绍顺序表之前我们先简单了解一下线性表:线性表是n个具有相同特性的数据元素的有限序列,在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表... 查看详情

线性表之链表(代码片段)

单链表也是一种链式存取的线性表,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,以next指针指向下一个节点而链接起来,相比于顺序表,链表有着快速增加,删除节点的优势,其节点... 查看详情

数据结构线性表循环链表之约瑟夫环(代码片段)

(一)前提41个人报数,1-3,当谁报数为3,谁就去嗝屁。现在获取他们嗝屁的顺序(二)实现结构顺序:3->1->5->2->4 (三)代码实现#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<time.h>#defineOK1#... 查看详情

数据结构学习总结线性表之单链表(代码片段)

   一,回忆链表  链表,别名链式存储结构或单链表,用于存储逻辑关系为"一对一"的数据。与顺序表不同,链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其物理存储位置是随机的。&nbs... 查看详情

线性链表之顺序表

/* @content线性链表之顺序表 @date2017-3-211:06 @authorJohnnyZen *//*线性表  顺序表  链式表[带头指针/不带头指针]   单链表  循环单链表 双向链表循环双链表   ADT& 查看详情

线性链表之顺序表

顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址(即基地址),计算任意一个元素的存储地址的时间是相等的,具有这一特点的存储结构称为[随机存储]。使用的基本数据结构:数组特点:顺序... 查看详情

数据结构与算法-线性表之循环链表(代码片段)

前言:前面几篇介绍了线性表的顺序和链式存储结构,其中链式存储结构为单向链表(即一个方向的有限长度、不循环的链表),对于单链表,由于每个节点只存储了向后的指针,到了尾部标识就停止了向后链的操作。也就是说... 查看详情