在软件开发中,存储列表常用顺序表或链表
定义:n个具有相同特性的数据元素的有限序列(相当于一条直线)(用数组存储),要求数据依次存储
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的那一行即可
缺点:空间少了不够用,空间多了浪费
typedef int SLDataType;//将int重定义为SLDataType
struct Seqlist
{
SLDataType* a;
int size;
int capacity;//空间的容量
};
增:增加(插入数据); 删:删除数据; 查:搜索数据; 改:修改数据的内容
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
在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");
//错误返回,不用返回具体的数,因为SeqInit的返回类型为void
return;
}
s.size = 0;
s.capacity = INIT_CAPACITY;
}
注意:
1.在 讲过,malloc函数可能开辟不成功,需要判断返回的指针是否为NULL
2.这里SeqInit(s);是传值调用,形参是实参的一份拷贝
SeqList.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
typedef int SLDataType;//将int重定义为SLDataType
#define INIT_CAPACITY 4
typedef struct Seqlist
{
SLDataType* a;//动态顺序表
int size;//有效数据的个数
int capacity;//空间的容量
}SL;
void SLInit(SL* ps);//声明初始化顺序表的函数
void SLDestory(SL* ps);//声明销毁顺序表的函数
main.c
#include "SeqList.h"
//定义测试顺序表的函数
void TestSeqList1()
{
SL s;
SLInit(&s);
SLDestory(&s);
}
int main()
{
TestSeqList1();
return 0;
}
SeqList.c(将对操作顺序表的函数写入此文件)
#include "SeqList.h"
void SLInit(SL* ps)
{
ps->a = (SLDataType*)malloc(sizeof(SLDataType)*INIT_CAPACITY);
if (ps->a == NULL)
{
perror("malloc");
return ;//错误返回
}
ps->size = 0;
ps->capacity = 0;
}
main()-->TestSeqList1()-->SLInit(&s)-->函数逐个返回
SeqList.c写入
void SLDestory(SL *ps)
{
free(ps->a);
ps->a = NULL;
ps->size = ps->capacity = 0;
}
注:在定义结构体时, a为指针,先对指针释放,再置为NULL;size和capacity为int类型,置为0即可
因篇幅问题不能全部显示,请点此查看更多更全内容