使用c语言创建顺序表
时间: 2023-12-03 07:04:42 浏览: 76
以下是使用C语言创建顺序表的基本步骤:
1. 定义顺序表结构体
```c
#define MAXSIZE 100 // 定义顺序表的最大长度
typedef struct {
int data[MAXSIZE]; // 存储元素的数组
int length; // 当前顺序表的长度
} SqList; // 定义顺序表类型
```
2. 初始化顺序表
```c
void InitList(SqList *L) {
int i;
for (i = 0; i < MAXSIZE; i++) {
L->data[i] = 0; // 将元素全部置为0,表示顺序表为空
}
L->length = 0; // 初始化顺序表长度为0
}
```
3. 插入元素
```c
int ListInsert(SqList *L, int pos, int elem) {
int i;
if (pos < 1 || pos > L->length + 1) { // 判断插入位置是否合法
return 0;
}
if (L->length >= MAXSIZE) { // 判断顺序表是否已满
return 0;
}
for (i = L->length; i >= pos; i--) { // 将插入位置后的元素向后移动一个位置
L->data[i] = L->data[i - 1];
}
L->data[pos - 1] = elem; // 插入新元素
L->length++; // 顺序表长度加1
return 1;
}
```
4. 删除元素
```c
int ListDelete(SqList *L, int pos) {
int i;
if (pos < 1 || pos > L->length) { // 判断删除位置是否合法
return 0;
}
for (i = pos - 1; i < L->length - 1; i++) { // 将删除位置后的元素向前移动一个位置
L->data[i] = L->data[i + 1];
}
L->length--; // 顺序表长度减1
return 1;
}
```
5. 获取元素
```c
int GetElem(SqList *L, int pos) {
if (pos < 1 || pos > L->length) { // 判断获取位置是否合法
return 0;
}
return L->data[pos - 1]; // 返回指定位置的元素值
}
```
6. 遍历顺序表
```c
void TraverseList(SqList *L) {
int i;
for (i = 0; i < L->length; i++) {
printf("%d ", L->data[i]); // 输出每个元素的值
}
printf("\n");
}
```
7. 完整代码
```c
#include <stdio.h>
#define MAXSIZE 100 // 定义顺序表的最大长度
typedef struct {
int data[MAXSIZE]; // 存储元素的数组
int length; // 当前顺序表的长度
} SqList; // 定义顺序表类型
void InitList(SqList *L) {
int i;
for (i = 0; i < MAXSIZE; i++) {
L->data[i] = 0; // 将元素全部置为0,表示顺序表为空
}
L->length = 0; // 初始化顺序表长度为0
}
int ListInsert(SqList *L, int pos, int elem) {
int i;
if (pos < 1 || pos > L->length + 1) { // 判断插入位置是否合法
return 0;
}
if (L->length >= MAXSIZE) { // 判断顺序表是否已满
return 0;
}
for (i = L->length; i >= pos; i--) { // 将插入位置后的元素向后移动一个位置
L->data[i] = L->data[i - 1];
}
L->data[pos - 1] = elem; // 插入新元素
L->length++; // 顺序表长度加1
return 1;
}
int ListDelete(SqList *L, int pos) {
int i;
if (pos < 1 || pos > L->length) { // 判断删除位置是否合法
return 0;
}
for (i = pos - 1; i < L->length - 1; i++) { // 将删除位置后的元素向前移动一个位置
L->data[i] = L->data[i + 1];
}
L->length--; // 顺序表长度减1
return 1;
}
int GetElem(SqList *L, int pos) {
if (pos < 1 || pos > L->length) { // 判断获取位置是否合法
return 0;
}
return L->data[pos - 1]; // 返回指定位置的元素值
}
void TraverseList(SqList *L) {
int i;
for (i = 0; i < L->length; i++) {
printf("%d ", L->data[i]); // 输出每个元素的值
}
printf("\n");
}
int main() {
SqList list;
InitList(&list);
ListInsert(&list, 1, 10);
ListInsert(&list, 2, 20);
ListInsert(&list, 3, 30);
TraverseList(&list);
ListDelete(&list, 2);
TraverseList(&list);
printf("%d\n", GetElem(&list, 2));
return 0;
}
```
阅读全文