如何用c语言建立一个顺序结构的线性表
时间: 2024-10-07 17:08:47 浏览: 218
C语言线性表顺序存储结构实例详解
5星 · 资源好评率100%
在C语言中,你可以使用数组或者链表数据结构来创建一个简单的顺序结构的线性表,这里我会分别讲解这两种方法。
**1. 使用数组实现顺序表**
```c
typedef struct {
int data[ capacity ]; // 容量预先设定的数组元素
int size; // 当前元素的数量
} LinearListArray;
// 动态分配数组并初始化
LinearListArray* createArrayList(int capacity) {
LinearListArray *list = malloc(sizeof(LinearListArray));
list->data = malloc(capacity * sizeof(int));
list->size = 0;
return list;
}
// 插入、删除操作会涉及到数组移动元素
void insertToArray(LinearListArray *list, int index, int value) {
if (index < 0 || index > list->size) {
printf("Invalid index.\n");
} else {
memmove(&list->data[index+1], &list->data[index], (list->size - index) * sizeof(int));
list->data[index] = value;
list->size++;
}
}
```
**2. 使用链表实现顺序表**
```c
typedef struct Node {
int data;
struct Node* next;
} ListNode;
typedef struct {
ListNode* head;
int size;
} LinearListLinkedList;
// 创建链表顺序表
LinearListLinkedList* createLinkedList() {
LinearListLinkedList *list = malloc(sizeof(LinearListLinkedList));
list->head = NULL;
list->size = 0;
return list;
}
// 插入节点到链表头部
void insertToLinkedList(LinearListLinkedList *list, int value) {
ListNode* newNode = malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = list->head;
list->head = newNode;
list->size++;
}
// 删除节点和调整链表
void deleteNodeFromLinkedList(LinearListLinkedList *list, int value) {
ListNode* current = list->head;
while (current != NULL && current->data != value) {
current = current->next;
}
if (current == NULL) return;
if (current == list->head) {
list->head = current->next;
} else {
ListNode* prev = current->prev;
prev->next = current->next;
}
free(current);
list->size--;
}
```
阅读全文