实现线性表的顺序存储定义,完成顺序表的创建、插入、删除、查找、排序操作的代码
时间: 2023-10-19 17:13:08 浏览: 189
以下是实现线性表的顺序存储定义,并完成了顺序表的创建、插入、删除、查找、排序操作的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
// 初始化顺序表
void initList(SqList *list) {
list->length = 0;
}
// 打印顺序表
void printList(SqList list) {
int i;
for (i = 0; i < list.length; i++) {
printf("%d ", list.data[i]);
}
printf("\n");
}
// 在顺序表中查找元素
int findElem(SqList list, int elem) {
int i;
for (i = 0; i < list.length; i++) {
if (list.data[i] == elem) {
return i;
}
}
return -1; // 没有找到返回-1
}
// 插入元素
int insertElem(SqList *list, int pos, int elem) {
int i;
if (list->length >= MAXSIZE) { // 判断是否超出最大长度
printf("顺序表已满,插入失败!\n");
return 0;
}
if (pos < 1 || pos > list->length + 1) { // 判断插入位置是否合法
printf("插入位置不合法,插入失败!\n");
return 0;
}
for (i = list->length - 1; i >= pos - 1; i--) { // 从后往前移动元素
list->data[i + 1] = list->data[i];
}
list->data[pos - 1] = elem; // 插入元素
list->length++; // 长度加一
printf("插入成功!\n");
return 1;
}
// 删除元素
int deleteElem(SqList *list, int pos) {
int i;
if (pos < 1 || pos > list->length) { // 判断删除位置是否合法
printf("删除位置不合法,删除失败!\n");
return 0;
}
for (i = pos - 1; i < list->length - 1; i++) { // 从前往后移动元素
list->data[i] = list->data[i + 1];
}
list->length--; // 长度减一
printf("删除成功!\n");
return 1;
}
// 冒泡排序
void bubbleSort(SqList *list) {
int i, j;
for (i = 0; i < list->length - 1; i++) {
for (j = 0; j < list->length - i - 1; j++) {
if (list->data[j] > list->data[j + 1]) {
int temp = list->data[j];
list->data[j] = list->data[j + 1];
list->data[j + 1] = temp;
}
}
}
printf("排序成功!\n");
}
int main() {
SqList list;
initList(&list);
insertElem(&list, 1, 1);
insertElem(&list, 2, 3);
insertElem(&list, 3, 2);
insertElem(&list, 4, 5);
printf("插入后的顺序表为:");
printList(list);
printf("元素2的位置为:%d\n", findElem(list, 2));
deleteElem(&list, 3);
printf("删除后的顺序表为:");
printList(list);
bubbleSort(&list);
printf("排序后的顺序表为:");
printList(list);
return 0;
}
```
阅读全文