基于顺序表的简单数据结构实现
在这篇文章中,我们将探讨一个简单的顺序表(Sequence List)实现,包括顺序表的初始化、插入、删除和打印等基本操作。顺序表是一种用数组实现的线性数据结构,具有随机访问的优点,适合于存储和管理有限数量的数据。
1. 头文件定义
首先,我们定义了一个头文件,包含顺序表的结构体和相关函数的声明。
#pragma once
#define MAX 100
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int data[MAX];
int length;
} seqlist;
void ini_seqlist(seqlist* list);
int insert_seqlist(seqlist* list, int index, int value);
int delete_seqlist(seqlist* list, int index);
void printSeqList(seqlist* list);
结构体定义
我们定义了一个 `seqlist` 结构体,包含两个成员:
- `data[MAX]`: 用于存储元素的数组,最大容量为 100。
- `length`: 当前顺序表中元素的数量。
2. 源文件实现
在源文件中,我们实现了顺序表的各种操作。
2.1 初始化顺序表
void ini_seqlist(seqlist* list) {
list->length = 0;
}
`ini_seqlist` 函数用于初始化顺序表,将其长度设置为 0。
2.2 插入元素
int insert_seqlist(seqlist* list, int index, int value) {
if (list->length >= MAX) {
printf("list is full\n");
return -1;
}
if (index < 0 || index > list->length) {
printf("index is invalid\n");
return -1;
}
for (int i = list->length; i > index; i--) {
list->data[i] = list->data[i - 1];
}
list->data[index] = value;
list->length++;
return 0;
}
`insert_seqlist` 函数用于在指定位置插入一个新元素。首先检查顺序表是否已满,然后检查插入位置是否有效。接下来,将插入位置之后的元素向后移动一位,并将新元素放入指定位置。
2.3 删除元素
int delete_seqlist(seqlist* list, int index) {
if (list->length <= 0) {
printf("list is empty\n");
return -1;
}
if (index < 0 || index >= list->length) {
printf("index is invalid\n");
return -1;
}
for (int i = index; i < list->length - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->length--;
return 0;
}
`delete_seqlist` 函数用于删除指定位置的元素。首先检查顺序表是否为空,然后检查删除位置是否有效。接下来,将删除位置之后的元素向前移动一位,并减少顺序表的长度。
2.4 打印顺序表
void printSeqList(seqlist* list) {
printf("Sequence List: ");
for (int i = 0; i < list->length; i++) {
printf("%d\n", list->data[i]);
}
printf("length: %d\n", list->length);
printf("打印完毕\n");
}
`printSeqList` 函数用于打印顺序表中的所有元素及其当前长度。
3. 使用示例
在主函数中,我们可以测试顺序表的各项功能。
#include"Lk.h"
int main() {
/*typedef struct {
int data[MAX];
int length;
}seqlist;*/
/*void ini_seqlist(seqlist * list);
int insert_seqlist(seqlist * list, int index, int value);
int delete_seqlist(seqlist * list, int index);
void printSeqList(seqlist * list);*/
seqlist* list = (seqlist*)malloc(sizeof(seqlist));
ini_seqlist(list);
for (int i = 0; i < 50; i++)
{
list->data[i] = i;
list->length++;
}
insert_seqlist(list, 9, 666);
printSeqList(list);
free(list);
list=NULL;
return 0;
}
在主函数中,我们首先初始化顺序表,然后插入几个元素,打印顺序表,删除一个元素,并再次打印顺序表。
顺序表的优点在于能够快速随机访问元素,但在插入和删除操作时需要移动元素,可能导致性能下降。尽管如此,顺序表在许多简单的应用场景中仍然非常有效。希望通过这篇文章,读者能对顺序表有更深入的理解,并能够在实际编程中应用这一数据结构。