c语言实现顺序表的基本操作
时间: 2023-11-25 13:07:34 浏览: 92
C语言实现顺序表的基本操作包括:结构体的定义、顺序表的初始化、插入元素、删除元素、按值查找元素、按位置查找元素、求顺序表长度、顺序表的打印、顺序表的销毁以及顺序表的扩容。
结构体的定义:
```c
typedef struct SeqList {
SLDataType* arr; //顺序表的数据元素存储空间
int size; //顺序表的当前数据个数
int capacity; //顺序表的最大容量
} SL;
```
顺序表的初始化:
```c
void SLInit(SL* p) {
p->arr = (SLDataType*)malloc(sizeof(SLDataType) * Init_CAPACITY);
if (p->arr == NULL) {
perror("malloc fail");
return;
}
p->size = 0;
p->capacity = Init_CAPACITY;
}
```
顺序表的插入元素:
```c
void SLInsert(SL* p, SLDataType x, int pos) {
assert(p);
assert(pos >= 1 && pos <= p->size + 1);
if (p->size >= p->capacity) {
SLExpand(p);
}
for (int i = p->size; i >= pos; --i) {
p->arr[i] = p->arr[i - 1];
}
p->arr[pos - 1] = x;
++p->size;
}
```
顺序表的删除元素:
```c
void SLDelete(SL* p, int pos) {
assert(p);
assert(pos >= 1 && pos <= p->size);
for (int i = pos - 1; i < p->size - 1; ++i) {
p->arr[i] = p->arr[i + 1];
}
--p->size;
}
```
按值查找元素:
```c
int SLFindByValue(SL* p, SLDataType x) {
assert(p);
for (int i = 0; i < p->size; ++i) {
if (p->arr[i] == x) {
return i + 1;
}
}
return -1;
}
```
按位置查找元素:
```c
SLDataType SLFindByPos(SL* p, int pos) {
assert(p);
assert(pos >= 1 && pos <= p->size);
return p->arr[pos - 1];
}
```
求顺序表长度:
```c
int SLLength(SL* p) {
assert(p);
return p->size;
}
```
顺序表的打印:
```c
void SLPrint(SL* p) {
assert(p);
for (int i = 0; i < p->size; ++i) {
printf("%d ", p->arr[i]);
}
printf("\n");
}
```
顺序表的销毁:
```c
void SLDestroy(SL* p) {
assert(p);
free(p->arr);
p->capacity = p->size = 0;
}
```
顺序表的扩容:
```c
void SLExpand(SL* p) {
assert(p);
SLDataType* temp = (SLDataType*)realloc(p->arr, sizeof(SLDataType) * (p->capacity * 2));
if (temp == NULL) {
perror("realloc fail");
return;
}
p->arr = temp;
p->capacity *= 2;
}
```
阅读全文