编制C语言程序,实现顺序表的求长度、遍历、数据的插入、数据的删除、数据的按值查找和按位查找等功能.
时间: 2024-09-18 09:01:50 浏览: 32
在C语言中,我们可以使用结构体来创建一个简单的顺序表。以下是实现这些功能的基本步骤:
1. **定义顺序表结构**:
```c
typedef struct {
int *data; // 整型指针数组存储元素
int size; // 当前大小
int capacity; // 容量
} SeqList;
```
2. **求长度(即元素数量)**:
```c
int list_length(SeqList *list) {
return list->size;
}
```
3. **初始化和遍历**:
```c
void init_list(SeqList *list, int capacity) {
list->data = (int*)malloc(capacity * sizeof(int));
list->size = 0;
list->capacity = capacity;
}
// 遍历
void traverse(SeqList *list) {
for (int i = 0; i < list->size; i++) {
printf("%d ", list->data[i]);
}
}
```
4. **插入数据**:
```c
void insert(SeqList *list, int value, int index) {
if (index >= list->size || index < 0) {
printf("Invalid index.\n");
return;
}
if (list->size == list->capacity) {
resize_list(list);
}
memmove(list->data + index + 1, list->data + index, (list->size - index) * sizeof(int));
list->data[index] = value;
list->size++;
}
// 扩容函数
void resize_list(SeqList *list) {
list->data = (int*)realloc(list->data, (list->capacity *= 2) * sizeof(int));
}
```
5. **删除数据**:
```c
void delete(SeqList *list, int index) {
if (index >= list->size || index < 0) {
printf("Invalid index.\n");
return;
}
memmove(list->data + index, list->data + index + 1, (list->size - index - 1) * sizeof(int));
list->size--;
if (list->size == list->capacity / 4 && list->capacity > 2) {
resize_list(list);
}
}
// 按值查找
int search_by_value(SeqList *list, int value) {
for (int i = 0; i < list->size; i++) {
if (list->data[i] == value) {
return i;
}
}
return -1; // 如果未找到,则返回-1
}
```
6. **按位查找(假设是二进制搜索,适用于有序列表)**:
```c
int binary_search(SeqList *list, int value, int low, int high) {
while (low <= high) {
int mid = low + (high - low) / 2;
if (list->data[mid] == value) {
return mid;
} else if (list->data[mid] < value) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1; // 未找到指定值
}
```
阅读全文