利用C语言实现顺序表的实例操作
什么是顺序表
顺序表,是指用一段地址连续的存储单元依次存储线性表中的各元素,从而形成的线性表。在顺序表中,元素的存储位置是按其逻辑顺序存放的。顺序表的优点是数据存储密度高,支持随机存取和直接访问,缺点是插入和删除操作效率较低。
顺序表的基本操作
顺序表的基本操作包括:
- 初始化顺序表
- 插入元素
- 删除元素
- 查找元素
- 修改元素
- 打印顺序表中的所有元素
下面我们将一步步实现这些操作。
顺序表的初始化
顺序表的初始化,就是为顺序表分配内存空间,并将顺序表中存储的元素个数初始化为0。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义顺序表最大长度
typedef struct {
int data[MAXSIZE]; // 存储数据元素的数组
int length; // 顺序表的长度
} SqList;
void initList(SqList *L) {
L->length = 0; // 初始时长度为0
}
顺序表的插入
在顺序表L的指定位置i处插入元素e,需要将i位置及之后的元素后移,并将e插入到i位置处。插入前需要判断顺序表是否已满,即当前的元素个数是否已经达到了最大长度MAXSIZE。
int insert(SqList *L, int i, int e) {
if (i < 1 || i > L->length + 1 || L->length == MAXSIZE) { // 判断i的合法性和表满的情况
return 0; // 插入失败
}
for (int j = L->length; j >= i; j--) { // 从后往前移动元素
L->data[j] = L->data[j-1];
}
L->data[i-1] = e; // 插入元素到i位置处
L->length++; // 顺序表长度增加1
return 1; // 插入成功
}
顺序表的删除
删除顺序表L中指定位置i处的元素,需要将i位置及之后的元素前移。
int delete(SqList *L, int i) {
if (i < 1 || i > L->length) { // 判断i的合法性
return 0; // 删除失败
}
for (int j = i-1; j < L->length-1; j++) { // 从前往后移动元素
L->data[j] = L->data[j+1];
}
L->length--; // 顺序表长度减少1
return 1; // 删除成功
}
顺序表的查找
查找顺序表L中第一个值为e的元素,并返回其在表中的位置。
int locate(SqList *L, int e) {
for (int i = 0; i < L->length; i++) { // 从前往后查找元素
if (L->data[i] == e) {
return i+1; // 返回元素在表中的位置
}
}
return -1; // 元素未找到
}
顺序表的修改
修改顺序表L中指定位置i处的元素为e。
int modify(SqList *L, int i, int e) {
if (i < 1 || i > L->length) { // 判断i的合法性
return 0; // 修改失败
}
L->data[i-1] = e; // 修改元素值
return 1; // 修改成功
}
打印顺序表中的所有元素
打印顺序表L中所有元素的值。
void printList(SqList *L) {
printf("[");
for (int i = 0; i < L->length; i++) {
printf("%d", L->data[i]);
if (i != L->length - 1) {
printf(", ");
}
}
printf("]\n");
}
示例说明
示例1:插入元素
下面是一个示例代码,展示如何插入元素到顺序表中。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义顺序表最大长度
typedef struct {
int data[MAXSIZE]; // 存储数据元素的数组
int length; // 顺序表的长度
} SqList;
void initList(SqList *L) {
L->length = 0; // 初始时长度为0
}
int insert(SqList *L, int i, int e) {
if (i < 1 || i > L->length + 1 || L->length == MAXSIZE) { // 判断i的合法性和表满的情况
return 0; // 插入失败
}
for (int j = L->length; j >= i; j--) { // 从后往前移动元素
L->data[j] = L->data[j-1];
}
L->data[i-1] = e; // 插入元素到i位置处
L->length++; // 顺序表长度增加1
return 1; // 插入成功
}
void printList(SqList *L) {
printf("[");
for (int i = 0; i < L->length; i++) {
printf("%d", L->data[i]);
if (i != L->length - 1) {
printf(", ");
}
}
printf("]\n");
}
int main() {
SqList L;
initList(&L);
insert(&L, 1, 1); // 插入元素
insert(&L, 2, 3); // 插入元素
insert(&L, 3, 5); // 插入元素
printList(&L); // 打印顺序表中的所有元素
return 0;
}
输出结果如下:
[1, 3, 5]
示例2:删除元素
下面是一个示例代码,展示如何删除顺序表中的元素。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义顺序表最大长度
typedef struct {
int data[MAXSIZE]; // 存储数据元素的数组
int length; // 顺序表的长度
} SqList;
void initList(SqList *L) {
L->length = 0; // 初始时长度为0
}
int delete(SqList *L, int i) {
if (i < 1 || i > L->length) { // 判断i的合法性
return 0; // 删除失败
}
for (int j = i-1; j < L->length-1; j++) { // 从前往后移动元素
L->data[j] = L->data[j+1];
}
L->length--; // 顺序表长度减少1
return 1; // 删除成功
}
void printList(SqList *L) {
printf("[");
for (int i = 0; i < L->length; i++) {
printf("%d", L->data[i]);
if (i != L->length - 1) {
printf(", ");
}
}
printf("]\n");
}
int main() {
SqList L;
initList(&L);
insert(&L, 1, 1); // 插入元素
insert(&L, 2, 3); // 插入元素
insert(&L, 3, 5); // 插入元素
delete(&L, 2); // 删除元素
printList(&L); // 打印顺序表中的所有元素
return 0;
}
输出结果如下:
[1, 5]
总结
本文介绍了利用C语言实现顺序表的操作,包括初始化顺序表、插入元素、删除元素、查找元素、修改元素和打印顺序表中的所有元素。这些操作是实现各种数据结构的基础,熟练掌握这些操作能够帮助我们更好地理解和处理数据结构中的各种问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用C语言实现顺序表的实例操作 - Python技术站