顺序表是线性表的一种,本质上是数组的扩展,具有物理地址连续、数据元素依次存储的特点,可分为静态顺序表和动态顺序表两种形式。以下是对顺序表的详细介绍:
顺序表基本概念顺序表的分类及结构体设计#define N 10typedef int SlDataType;//数据类型重定义;typedef int size_t;//容量和长度类型;//静态顺序表typedef struct SeqList { SlDataType array[N];//定长数组; sie_t size;}SeqList;typedef int SlDataType;//数据类型重定义;typedef int size_t;//容量和长度类型;//动态顺序表typedef struct SeqList { SlDataType * array;//指向动态开辟的数组 size_t size;//有效数据个数 size_t capacity;//容量大小}SeqList;顺序表接口及实现#pragma once//防止文件被二次引用;#include<stdio.h> //#include<assert.h> //assert#include<stdlib.h> //realloctypedef int SlDataType;//数据类型重定义;typedef int size_t;//容量和长度类型;//动态顺序表typedef struct SeqList { SlDataType * array;//指向动态开辟的数组 size_t size;//有效数据个数 size_t capacity;//容量大小}SeqList_t;//初始化顺序表void SeqListInit(SeqList_t *seq);//销毁顺序表void SeqListDestory(SeqList_t *seq);//检查顺序表容量是否满了,好进行增容void CheckCapacity(SeqList_t *seq);//顺序表尾插void SeqListPushBack(SeqList_t *seq, SlDataType x);//顺序表尾删void SeqListPopBack(SeqList_t *seq);//顺序表头插void SeqListPushFront(SeqList_t *seq, SlDataType x);//顺序表头删void SeqListPopFront(SeqList_t *seq);//打印顺序表void SeqListPrint(SeqList_t *seq);//在顺序表中查找指定值void SeqListFind(const SeqList_t* seq,SlDataType x);//在顺序表中指定下标位置插入数据void SeqListInsert(SeqList_t* seq,size_t pos,SlDataType x);//在顺序表中删除指定下标位置的数据void SeqListErase(SeqList_t* seq, size_t pos);//查找顺序表中的数据个数size_t SeqListSize(const SeqList_t* seq);//修改指定下标位置的数据void SeqListModify(SeqList_t* seq, size_t pos, SlDataType x);#include "SeqList.h"//初始化顺序表,需要加assert断沿,防止传递进来的指针为空;void SeqListInit(SeqList_t *seq) { //assert(seq!=NULL);//如果seq为NULL,就报异常;暴力手段 if (seq == NULL) {//异常温柔处理手段 printf("seq is nulln"); return; } seq->array = NULL;//初始化列表为空; seq->size = 0;//初始数据个数为0; seq->capacity = 0;//初始化空间容量为0;}- 销毁顺序表void SeqListDestory(SeqList_t *seq) { assert(seq != NULL);//如果seq为NULL,就报异常;暴力手段 //if (seq == NULL) {//异常温柔处理手段 // printf("seq is nulln"); // return; //} free(seq->array);//释放动态开辟的空间 seq->array = NULL;//置空; seq->size = 0;//数据个数置0; seq->capacity = 0;//空间容量大小为0;}- 检查容量并扩容void CheckCapacity(SeqList_t *seq) { assert(seq != NULL);//如果seq为NULL,就报异常;暴力手段 if (seq->size==seq->capacity) {//检查容量是否满了,如果满了,需要扩容 size_t new_capacity;//新的容量 if (seq->capacity==0) { new_capacity = 4; } else { new_capacity = 2*seq->capacity; } SlDataType *p = realloc(seq->array,sizeof(SlDataType)*new_capacity);//扩容 if (p == NULL) { printf("extern capacity is failn");//扩容失败 return; } seq->array = p; seq->capacity = new_capacity; }}