IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【小白】线性表的顺序存储结构的实现(C语言) -> 正文阅读

[数据结构与算法]【小白】线性表的顺序存储结构的实现(C语言)

@【TOC】(目录)第一章:线性表


前言

数据结构作为计算机系的最重要课程是计算机系学生必修课,我们需要引起足够的重视。希望能够把自己的代码分享给有需要的同学们,一起进步。实现语言为C语言,发博客之前已检查了能否运行成功。
学习教材:数据结构(C语言版)-严蔚敏 吴伟民
代课教师:呼克佑(太原理工大学讲师)
作者简介: 中部某末流211软院大二学生

一、数据结构是什么?

数据结构是计算机存储、组织数据的方式

二、线性表的顺序存储方式的实现

1.实现所需的主要函数

int InitList(SqList *L);
int DestroyList(SqList *L);
int ListEmpty(SqList L);
int ListLength(SqList L);
int GetElem(SqList L, int i, int *e);
int ListInsert(SqList *L, int i, int e);
int ListDelete(SqList *L, int i, int *e);
int  LocateElem(SqList L,int e);
void GetElems(SqList L);

2.常量定义

#define LIST_SIZE 10
#define OVERFLOW 1
#define OK 0
#define OVERFLOW -1
#define TRUE 1
#define FALSE 0
#define ERROR 0

3.定义结构体

typedef struct SqList{
    int  *data;
    int length;
};

4.实现

4.1初始化,构建新的线性表

int InitList(struct  SqList *L){
    L->data = (int *) malloc(sizeof(int) * LIST_SIZE);
    //申请内存不成功
    if(!L->data)
        return ERROR;
    L->length = 0;
    return OK;
}

4.2销毁线性表

int DestroyList(struct SqList *L){
    free(L->data);
    L->length = 0;
    L->data = NULL;
    return OK;
}

4.3判断线性表是否为空

int ListEmpty(struct SqList L){
    if(L.length < 1)
        return TRUE;
    else 
        return FALSE;
}

4.4获取线性表长度

int ListLength(struct SqList L){
   return L.length;
}

4.5获取线性表中第i个元素,并将值返回给e

int GetElem(struct SqList L, int i,int *e){
    if(i < 1 ||i > L.length )
        return ERROR;
    *e = L.data[i-1];
    return OK;
}

4.6在线性表的第i个位置插入元素e

//将第i个位置以后的元素依次都往后移一个单位空间,将e插入第i个位置
int ListInsert(struct SqList *L, int i, int e){
    if(i < 1 || i > L->length + 1)
        return ERROR;
    for(int j = i-1; j <L->length-1;j++)
        L->data[j+1] = L->data[j];
    L->data[i-1] = e; 
    L->length++;
   return OK;
}

4.7在线性表中删除第i个位置的元素

//将i+1个以后的元素依次向前移一个单位空间
int ListDelete(struct SqList *L, int i,int *e){
    if(i < 1 || i > L->length)
        return ERROR;
    *e = L->data[i-1];
    for(int j = L->length-1; j > L->length-1; j--)
        L->data[j-1] = L->data[j];
    L->length--;
    return OK;
}

4.8查找顺序表中与给定值e相等的元素,若成功则返回该元素在表中的位置,否则返回0

int  LocateElem(struct SqList L,int e){
    int i;
    for(i = 0; i < L.length; i++)
        if(L.data[i] == e) 
            return i+1;
    return 0;
}

4.8获取线性表中的所有元素

void GetElems(SqList L){
    for(int i = 1; i <= L.length; i++)
        printf("线性表中第%d个元素是%d\n",i,L.data[i-1]);
}

总结

线性表的顺序存储结构优点:随机存取
缺点:不适用频繁的插入和删除,效率不高,时间复杂度O(n)

【小白】线性表的顺序存储结构的实现(C语言)

下一节:线性表的链式存储结构的实现

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-28 00:12:11  更:2021-09-28 00:12:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 10:01:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码