若发现文章有误,敬请指教,谢谢!
一、运行环境
- win10
- DevCpp5.11
二、顺序表定义的两种方式
2.1 静态分配
2.1.1 结构体
#define MaxSize 10
// 静态分配
typedef struct{
int data[MaxSize];
int length;
}SeqList;
2.1.2 初始化
// 初始化顺序表
void InitList(SeqList &L){
for(int i = 0; i < MaxSize; i++){
L.data[i] = 0; // 初始化数据为 0
}
L.length = 0; // 顺序表初始长度为0
}
2.1.3 测试代码
#include<stdio.h>
#define MaxSize 10
// 静态分配
typedef struct{
int data[MaxSize];
int length;
}SeqList;
// 基本操作 ——— 初始化一个顺序表
void InitList(SeqList &L){
for(int i = 0; i < MaxSize; i++){
L.data[i] = 0; // 初始化数据为 0
}
L.length = 0; // 顺序表初始长度为0
}
void printList(SeqList L){
printf("当前顺序表的元素个数: %d, 元素分别为: ", L.length);
for(int i = 0; i < L.length; i++){
printf(" %d", L.data[i]);
}
printf("\n");
}
int main(){
SeqList L; // 声明顺序表
InitList(L); //初始化顺序表
printList(L);
}
2.2 动态分配
2.2.1 结构体
#define InitSize 10
typedef struct {
int *data; // 指示动态分配数组的指针
int MaxSize; // 顺序表的最大容量
int length; // 顺序表的当前长度
}SeqList;
2.2.2 初始化
/* 初始化列表 */
void InitList(SeqList &L){
// 使用 malloc函数申请连续的存储空间
L.data = (int *) malloc(InitSize * sizeof(int));
L.length = 0;
L.MaxSize = InitSize;
// 初始化数据
for(int i = 0; i < L.MaxSize; i++)
L.data[i] = 0;
}
2.2.3 扩容操作
/*扩增容量*/
void IncreaseSize(SeqList &L, int len){
int *bak = L.data; // 备份初始数据
L.data = (int *) malloc((L.MaxSize + len) * sizeof(int)); // 扩容
for(int i = 0; i < L.length; i++){
L.data[i] = bak[i]; // 为新申请的空间分配原先的数据
}
L.MaxSize = L.MaxSize + len; // 更替最大容量
free(bak); // 释放原先的备份资源
}
2.2.4 测试代码
#include <stdio.h>
#include <stdlib.h>
#define InitSize 10
typedef struct {
int *data; // 指示动态分配数组的指针
int MaxSize; // 顺序表的最大容量
int length; // 顺序表的当前长度
}SeqList;
/* 初始化列表 */
void InitList(SeqList &L){
// 使用 malloc函数申请连续的存储空间
L.data = (int *) malloc(InitSize * sizeof(int));
L.length = 0;
L.MaxSize = InitSize;
// 初始化数据
for(