c语言顺序表基本操作
时间: 2023-10-15 07:03:35 浏览: 101
顺序表是一种线性表的数据结构,它的特点是元素之间的顺序是按照元素插入的顺序来确定的。C语言中,顺序表的基本操作包括初始化、插入元素、删除元素、按位置查找元素、按值查找元素、求表长和打印等操作。下面是基本操作的代码示例:
1. 初始化顺序表:
```c
typedef struct SeqList {
SLDataType* arr; //顺序表的数据元素存储空间
int size; //顺序表的当前数据个数
int capacity; //顺序表的最大容量
} SL;
void SLInit(SL* p) {
p->arr = (SLDataType*)malloc(sizeof(SLDataType) * Init_CAPACITY); //动态开辟一块空间给arr
if (p == NULL) {
perror("malloc fail");
return;
}
p->size = 0;
p->capacity = Init_CAPACITY;
}
```
2. 插入元素:
```c
void SLInsert(SL* p, int pos, SLDataType x) {
assert(p);
assert(pos >= 1 && pos <= p->size + 1);
if (p->size == p->capacity) {
p->arr = (SLDataType*)realloc(p->arr, sizeof(SLDataType) * (p->capacity * 2));
if (p->arr == NULL) {
perror("realloc fail");
return;
}
p->capacity *= 2;
}
for (int i = p->size; i >= pos; i--) {
p->arr[i] = p->arr[i - 1];
}
p->arr[pos - 1] = x;
p->size++;
}
```
3. 删除元素:
```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--;
}
```
4. 按位置查找元素:
```c
SLDataType SLFindByPos(SL* p, int pos) {
assert(p);
assert(pos >= 1 && pos <= p->size);
return p->arr[pos - 1];
}
```
5. 按值查找元素:
```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;
}
```
6. 求表长:
```c
int SLLength(SL* p) {
assert(p);
return p->size;
}
```
7. 打印顺序表:
```c
void SLPrint(SL* p) {
assert(p);
for (int i = 0; i < p->size; i++) {
printf("%d ", p->arr[i]);
}
printf("\n");
}
```
阅读全文