定义和表示方法

定义

顺序表:零个或多个相同元素的有限序列

基础知识补充

值比较

printf("%d", -1 == -1); // 1 printf("%d", 1 == -1); // 0

引入布尔类型

#include// C99标准才支持 true false

顺序表的表示方法(重点)

#define MAXSIZE 100 // 顺序表最大长度 typedef int data_t ; // 数据类型 typedef struct { data_t data[MAXSIZE]; // 存储空间大小 int last; // 当前表尾指针 }seqlist_t, *sqlink_t; // 顺序表类型
说明:
当last = -1时,表示顺序表为空seqlist_t顺序表值*sqlink_t顺序表指针 ,typedef struct {} * sqlink_t

图示

顺序表运算

创建一个空的顺序表

步骤:
创建结构体指针seqlist_t *L = NULL;申请内存L = (seqlist_t *)malloc(sizeof(seqlist_t));初始化设置:L->last = -1;返回值:return L;
代码:
seqlist_t *create_seqlist(void){ // 1. 申请内存空间 seqlist_t *L = NULL; L = (seqlist_t *)malloc(sizeof(seqlist_t)); if (L== NULL){ puts("debug : malloc failed !"); return NULL; } // 2. 初始化 L->last = -1; return L; }

置空表

步骤:
检查输入参数是否有效释放空间
代码:
/*清空顺序表*/ void clear_seqlist(seqlist_t *L) { // 1.检查输入参数是否有效:判断表是否为空 if (NULL == L) { puts("seqlist_ *L is NULL!"); return; } // 2.释放内存空间 free(L); return; }

判断表是否为空

参数判断,如果指针为空,返回-1
返回值:
顺序表为空时,返回1
顺序表不为空时,返回0
代码:
/*判断顺序表是否为空*/ int is_empty_seqlist(seqlist_t* L) { // 参数判断 if (NULL == L) { puts("seqlist *L is NULL !"); return -1; } // 2.返回结果 return (L->last == -1); }

判断顺序表是否为满

步骤:
参数判断返回结果
代码:
/*判断顺序表是否为满*/ int is_full_seqlist(seqlist_t* L) { // 1.检查输入参数是否有效:判断表是否为空 if (L == NULL) { puts("seqlist_ *L is NULL!"); return -1; } // 2. 通过比较last与MAXSIZE的大小判断顺序表是否为满 return (L->last == (MAXSIZE - 1)); }

设置顺序表为满

步骤:
参数判断将顺序表设置为满
代码:
/*设置顺序表为满*/ void set_empty_seqlist(seqlist_t* L) { // 1.参数判断 if (NULL == L) { puts("seqlist *L is NULL !"); return; } // 2. 将顺序表设置为满 L->last = MAXSIZE - 1; return; }

获取顺序表长度

步骤:
参数判断返回结果
代码:
/*获取顺序表长度*/ int get_length_seqlist(seqlist_t* L) { // 1. 参数判断 if (NULL == L) { puts("seqlist *L is NULL !"); return -1; } // 2.返回结果 return (L->last +1); }

显示数据:遍历顺序表有效元素

步骤:
参数判断获取顺序表长度for循环遍历顺序表长度遍历内容:[0, L->last]取顺序表的值: L->data[i]
代码:
/*显示数据表*/ void show_seqlist(seqlist_t* L) { // 1. 参数判断 if (NULL == L) { puts("seqlist *L is NULL !"); return; } // 2. 获取顺序表长度 for (int i = 0; ilast; ++i) { printf("L->data[%d] = %d\n", i, L->data[i]); } return; }

通过位置插入数据

描述:将元素x插入到表中,第i个元素ai之前,且表长+1
步骤:
参数检查
链表是否已满is_full_seqlist(L)位置是否合法pos > (L->last + 1)
移动元素
从最后一个位置开始移动i = L->last依次后移1位:L->data[i + 1] = L->data[i]结束条件:i