自学内容网 自学内容网

82.【C语言】数据结构之顺序表

在软件开发中,存储列表常用顺序表或链表

1.线性表

定义:n个具有相同特性的数据元素的有限序列(相当于一条直线)(用数组存储),要求数据依次存储

2.分类

1.静态顺序表:使用定长数组存储元素

代码示例(写入Seqlist.h中)

typedef int SLDataType;//将int重定义为SLDataType
#define N 10
struct Seqlist
{
SLDataType a[N];
int size;
};

备注:SLDataType的全称 Sequence List Data Type,a[N]为int类型,含10个元素的空间

想修改a数组的空间大小,修改#define的那一行即可

缺点:空间少了不够用,空间多了浪费

2.动态顺序表:使用与动态内存管理有关的函数

代码示例(写入Seqlist.h中)

typedef int SLDataType;//将int重定义为SLDataType
struct Seqlist
{
SLDataType* a;
int size;
    int capacity;//空间的容量
};

补:数据管理的四个需求:

增:增加(插入数据); 删:删除数据; 查:搜索数据; 改:修改数据的内容

3.操作顺序表

1.初始化顺序表

1.不开辟空间

SeqList.h

#pragma once
#include <stdio.h>
#include <stdlib.h>

typedef int SLDataType;//将int重定义为SLDataType
typedef struct Seqlist
{
SLDataType* a;//动态顺序表
int size;//有效数据的个数
int capacity;//空间的容量
}SL;//SL 就是 struct Seqlist 

void SeqInit(SL s);//声明初始化顺序表的函数
void SeqDestory(SL s);//声明销毁顺序表的函数

将结构体写入头文件,这样多个源文件可以同时引用

main.c

#include "SeqList.h"
SL s;//全局变量

//定义测试顺序表的函数
void TestSeqList1()
{
SeqInit(s);
}

int main()
{
TestSeqList1();
return 0;
}

注意:不能将SL s;写在TestSeqList1内,否则未初始化会报错

 

SeqList.c(将对操作顺序表的函数写入此文件)

#include "SeqList.h"
void SeqInit(SL s)
{
s.a = NULL;
s.size = 0;
s.capacity = 0;
}

上述为s.a赋值为NULL

2.开辟空间

在SeqList.h中添加

#define INIT_CAPACITY 4//初始容量为4

SeqList.c修改为

#include "SeqList.h"
void SeqInit(SL s)
{
s.a = (SLDataType*)malloc(sizeof(SLDataType)*INIT_CAPACITY);
if (s.a == NULL)
{
perror("malloc");
return 1;//错误返回
}
s.size = 0;
s.capacity = INIT_CAPACITY;
}

注意:在68.【C语言】动态内存管理(重点)(1) 讲过,malloc函数可能开辟不成功,需要判断返回的指针是否为NULL

SeqList项目函数的调用过程

main()-->TestSeqList1()-->SeqInit(s)-->函数逐个返回


原文地址:https://blog.csdn.net/2401_85828611/article/details/142922421

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!