目录
一.线性表
线性表(linear_list)是最常用且最简单的一种数据结构。一个线性表是n个数据元素的有限序列。至于每个数据元素的具体含义,在不同的情况下各不相同,它可以是一个数或一个符号,也可以是一页书,甚至其他更复杂的信息。
再稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成。在这种情况下,常把数据元素成为记录(record),含有大量记录的线性表又称文件(file)。
有且只有一个开始的结点,并且除了开始结点外,其余结点都有直接前驱,并且除了结束外,其余结点都有直接后继。
线性表按照其数据的存储方式分为两种:
1.顺序表:数据结点之间,逻辑相邻,物理也相邻
2.链表:数据结点之间,逻辑相邻,物理不一定相邻
二.顺序表的实现
1.基础知识
将逻辑上相邻的数据元素,存储在物理上也相邻的存储单元中。用一组地址连续的存储单元依次存储线性表的数据元素。
2.代码实现
头文件的设计:
#pragma once
//可扩容的顺序表的结构体设计
#define LIST_INIT_SIZE 100 //初始大小
#define LISTINCREMENT 10
typedef int ELEM_TYPE;
typedef struct Sqlist {
ELEM_TYPE* elem;//存储空间基址(用来接收malloc返回值在堆上申请的连续空间块开始地址)
int length;
int listsize;
}Sqlist,*PSqlist;
//初始化
void Init_Sqlist(struct Sqlist*sq);
//头插
bool Insert_head(struct Sqlist* sq,ELEM_TYPE val);
//尾插
bool Insert_tail(struct Sqlist* sq,ELEM_TYPE val);
//按位置插
bool Insert_pos(struct Sqlist* sq,int pos, ELEM_TYPE val);
//头删
bool Del_head(struct Sqlist* sq);
//尾删
bool Del_tail(struct Sqlist* sq);
//按位置删
bool Del_pos(struct Sqli