线性表的类型定义
线性表是常用且最简单的一种数据结构。一个线性表是n个将数据元素的有限序列。线性表是一个灵活的数据结构,它的长度可根据需要增长或缩短,插入与删除。
线性表的插入删除查找
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define MAX_SIZE 100
// 初始化顺序表
void initList(int list[], int* length) {
*length = 0;
}
// 查找数据
int searchList(int list[], int length, int data) {
for (int i = 0; i < length; i++) {
if (list[i] == data) {
return i; // 返回数据所在位置
}
}
return -1; // 若未找到返回 -1
}
// 插入数据
void insertList(int list[], int* length, int pos, int data) {
if (pos < 0 || pos > *length) {
printf("插入位置超出范围\n");
return;
}
if (*length == MAX_SIZE) {
printf("顺序表已满\n");
return;
}
// 将插入位置后的数据依次后移
for (int i = *length - 1; i >= pos; i--) {
list[i + 1] = list[i];
}
list[pos] = data;
(*length)++;
}
// 删除数据
void deleteList(int list[], int* length, int pos) {
if (pos < 0 || pos >= *length) {
printf("删除位置超出范围\n");
return;
}
// 将删除位置后的数据依次前移
for (int i = pos; i < *length - 1; i++) {
list[i] = list[i + 1];
}
(*length)--;
}
void printList(int list[], int length) {
for (int i = 0; i < length; i++) {
printf("%d ", list[i]);
}
printf("\n");
}
int main() {
int list[MAX_SIZE];
int length;
int n, searchPos, insertPos, insertData, deletePos;
printf("请输入样本总数目:");
scanf("%d", &n);
printf("请输入 %d 个样本:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &list[i]);
}
length = n;
int list1[MAX_SIZE];
for (int i = 0; i < length; i++) {
list1[i] = list[i];
}
printf("请输入要查找的数据的位置:");
scanf("%d", &searchPos);
int searchData = list[searchPos];
int searchResult = searchList(list, length, searchData);
if (searchResult != -1) {
printf("数据 %d 位于顺序表的位置 %d\n", searchData, searchResult);
}
else {
printf("未找到数据 %d\n", searchData);
}
printf("请输入要插入的数据的位置和数据:");
scanf("%d %d", &insertPos, &insertData);
insertList(list, &length, insertPos, insertData);
int list2[MAX_SIZE];
for (int i = 0; i < length; i++) {
list2[i] = list[i];
}
printf("请输入要删除的数据的位置:");
scanf("%d", &deletePos);
deleteList(list, &length, deletePos);
int list3[MAX_SIZE];
for (int i = 0; i < length; i++) {
list3[i] = list[i];
}
printf("顺序表创建后,数据数组按顺序排列的全部数据:");
printList(list1, length);
printf("插入新数据后,数据数组按顺序排列的全部数据:");
printList(list2, length);
printf("删除一个数据后,数据数组按顺序排列的全部数据:");
printList(list3, length);
return 0;
}
以下是逐步解释:
1. 定义了一个常量 MAX_SIZE
,表示顺序表的最大容量。
#define MAX_SIZE 100
2. 定义了初始化顺序表的函数 initList
,用于将顺序表的长度初始化为0。
void initList(int list[], int* length) {
*length = 0;
}
3. 定义了查找数据的函数 searchList
,在顺序表中查找指定数据,并返回其位置。
int searchList(int list[], int length, int data) {
for (int i = 0; i < length; i++) {
if (list[i] == data) {
return i; // 返回数据所在位置
}
}
return -1; // 若未找到返回 -1
}
4. 定义了插入数据的函数 insertList
,在指定位置插入新的数据。
void insertList(int list[], int* length, int pos, int data) {
if (pos < 0 || pos > *length) {
printf("插入位置超出范围\n");
return;
}
if (*length == MAX_SIZE) {
printf("顺序表已满\n");
return;
}
// 将插入位置后的数据依次后移
for (int i = *length - 1; i >= pos; i--) {
list[i + 1] = list[i];
}
list[pos] = data;
(*length)++;
}
5. 定义了删除数据的函数 deleteList
,在指定位置删除数据。
void deleteList(int list[], int* length, int pos) {
if (pos < 0 || pos >= *length) {
printf("删除位置超出范围\n");
return;
}
// 将删除位置后的数据依次前移
for (int i = pos; i < *length - 1; i++) {
list[i] = list[i + 1];
}
(*length)--;
}
6. 主函数 main
中,首先声明了一些变量和数组。
int list[MAX_SIZE];
int length;
int n, searchPos, insertPos, insertData, deletePos;
7. 接下来,通过用户的输入初始化顺序表。
printf("请输入样本总数目:");
scanf("%d", &n);
printf("请输入 %d 个样本:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &list[i]);
}
length = n;
8. 用户输入要查找的数据位置,调用 searchList
函数查找数据并输出结果。
printf("请输入要查找的数据的位置:");
scanf("%d", &searchPos);
int searchData = list[searchPos];
int searchResult = searchList(list, length, searchData);
if (searchResult != -1) {
printf("数据 %d 位于顺序表的位置 %d\n", searchData, searchResult);
} else {
printf("未找到数据 %d\n", searchData);
}
9. 用户输入要插入的数据的位置和数据,调用 insertList
函数进行插入操作
printf("请输入要插入的数据的位置和数据:");
scanf("%d %d", &insertPos, &insertData);
insertList(list, &length, insertPos, insertData);
10. 用户输入要删除的数据的位置,调用 deleteList
函数进行删除操作。
printf("请输入要删除的数据的位置:");
scanf("%d", &deletePos);
deleteList(list, &length, deletePos);
11. 最后,输出顺序表创建后的全部数据、查找的数据、插入新数据后的全部数据以及删除一个数据后的全部数据。
printf("顺序表创建后,数据数组按顺序排列的全部数据:");
for (int i = 0; i < length; i++) {
printf("%d ", list[i]);
}
printf("\n");
printf("输出查找的数据:%d\n", searchData);
printf("插入新数据后,数据数组按顺序排列的全部数据:");
for (int i = 0; i < length; i++) {
printf("%d ", list[i]);
}
printf("\n");
printf("删除一个数据后,数据数组按顺序排列的全部数据:");
for (int i = 0; i < length; i++) {
printf("%d ", list[i]);
}
printf("\n");