#include <stdio.h> #include <stdlib.h>

// 定义顺序表结构体 typedef struct { int *data; // 数据指针 int length; // 当前长度 int maxSize; // 最大长度 } SeqList;

// 初始化顺序表 void init(SeqList *list, int maxSize) { list->data = (int *)malloc(maxSize * sizeof(int)); list->length = 0; list->maxSize = maxSize; }

// 插入元素 int insert(SeqList *list, int index, int element) { if (index < 0 || index > list->length) { printf('插入位置错误\n'); return 0; } if (list->length >= list->maxSize) { printf('顺序表已满,无法插入\n'); return 0; } for (int i = list->length; i > index; i--) { list->data[i] = list->data[i-1]; } list->data[index] = element; list->length++; return 1; }

// 删除元素 int removeElement(SeqList *list, int index) { if (index < 0 || index >= list->length) { printf('删除位置错误\n'); return 0; } for (int i = index; i < list->length - 1; i++) { list->data[i] = list->data[i+1]; } list->length--; return 1; }

// 取元素 int getElement(SeqList *list, int index) { if (index < 0 || index >= list->length) { printf('取元素位置错误\n'); return -1; } return list->data[index]; }

// 单链表结点结构体 typedef struct Node { int data; struct Node *next; } Node;

// 创建单链表 Node* createLinkedList() { Node *head = NULL; int value; printf('请输入元素的值,以-1结束输入:\n'); scanf('%d', &value); while (value != -1) { Node *newNode = (Node *)malloc(sizeof(Node)); newNode->data = value; newNode->next = head; head = newNode; scanf('%d', &value); } return head; }

// 输出单链表 void printLinkedList(Node *head) { Node *p = head; while (p != NULL) { printf('%d ', p->data); p = p->next; } printf('\n'); }

// 在单链表的第index个位置插入元素 void insertLinkedList(Node *head, int index, int element) { Node *p = head; int count = 0; while (p != NULL && count < index - 1) { p = p->next; count++; } if (p == NULL || count > index - 1) { printf('插入位置错误\n'); return; } Node *newNode = (Node *)malloc(sizeof(Node)); newNode->data = element; newNode->next = p->next; p->next = newNode; printf('插入成功\n'); }

// 删除单链表中的第index个元素 void removeLinkedList(Node *head, int index) { Node *p = head; int count = 0; while (p != NULL && count < index - 1) { p = p->next; count++; } if (p == NULL || count > index - 1 || p->next == NULL) { printf('删除位置错误\n'); return; } Node *temp = p->next; p->next = temp->next; free(temp); printf('删除成功\n'); }

// 取单链表中的第index个元素 int getLinkedListElement(Node *head, int index) { Node *p = head; int count = 0; while (p != NULL && count < index) { p = p->next; count++; } if (p == NULL || count > index) { printf('取元素位置错误\n'); return -1; } return p->data; }

int main() { // 顺序表操作 SeqList list; init(&list, 10); insert(&list, 0, 1); insert(&list, 1, 2); insert(&list, 2, 3); printf('顺序表中的元素:'); for (int i = 0; i < list.length; i++) { printf('%d ', list.data[i]); } printf('\n');

removeElement(&list, 1);
printf('删除后顺序表中的元素:');
for (int i = 0; i < list.length; i++) {
    printf('%d ', list.data[i]);
}
printf('\n');

printf('顺序表中的第2个元素:%d\n', getElement(&list, 1));

// 单链表操作
Node *head = createLinkedList();
printf('单链表中的元素:');
printLinkedList(head);

insertLinkedList(head, 3, 67);
insertLinkedList(head, 9, 10);
printf('插入后单链表中的元素:');
printLinkedList(head);

removeLinkedList(head, 6);
removeLinkedList(head, 8);
printf('删除后单链表中的元素:');
printLinkedList(head);

printf('单链表中的第5个元素:%d\n', getLinkedListElement(head, 5));
printf('单链表中的第7个元素:%d\n', getLinkedListElement(head, 7));

return 0;

} 以上代码步骤内容:1. 引入头文件<stdio.h>和<stdlib.h>。 2. 定义顺序表结构体SeqList,包含数据指针data、当前长度length和最大长度maxSize。 3. 初始化顺序表函数init,接收一个SeqList指针和最大长度maxSize作为参数,动态分配内存并初始化顺序表的长度和最大长度。 4. 插入元素函数insert,接收一个SeqList指针、插入位置index和要插入的元素element作为参数,判断插入位置的合法性并进行插入操作。 5. 删除元素函数removeElement,接收一个SeqList指针和要删除的位置index作为参数,判断删除位置的合法性并进行删除操作。 6. 取元素函数getElement,接收一个SeqList指针和要取元素的位置index作为参数,判断取元素位置的合法性并返回对应位置的元素。 7. 定义单链表结点结构体Node,包含数据data和指向下一个结点的指针next。 8. 创建单链表函数createLinkedList,动态创建单链表并返回头结点的指针。 9. 输出单链表函数printLinkedList,接收一个头结点的指针作为参数,遍历链表并输出每个结点的数据。 10. 在单链表的第index个位置插入元素函数insertLinkedList,接收一个头结点的指针、插入位置index和要插入的元素element作为参数,判断插入位置的合法性并进行插入操作。 11. 删除单链表中的第index个元素函数removeLinkedList,接收一个头结点的指针和要删除的位置index作为参数,判断删除位置的合法性并进行删除操作。 12. 取单链表中的第index个元素函数getLinkedListElement,接收一个头结点的指针和要取元素的位置index作为参数,判断取元素位置的合法性并返回对应位置的元素。 13. 主函数main,用于测试顺序表和单链表的操作。首先初始化顺序表并进行插入操作,然后进行删除和取元素操作。接着创建单链表并输出链表中的元素,然后进行插入和删除操作。最后取单链表中的元素并输出。

C语言顺序表和单链表实现示例 - 数据结构基础

原文地址: https://www.cveoy.top/t/topic/f3xU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录