C语言实现顺序表和单链表数据结构

概述

本文将介绍两种常用的线性数据结构:顺序表和单链表,并使用 C 语言实现它们的基本操作。

顺序表

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

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

插入元素c// 插入元素int insert(SeqList *list, int index, int element) { if (index < 0 || index > list->length) { printf('插入位置错误

'); return 0; } if (list->length >= list->maxSize) { printf('顺序表已满,无法插入 '); 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;}

删除元素c// 删除元素int removeElement(SeqList *list, int index) { if (index < 0 || index >= list->length) { printf('删除位置错误

'); return 0; } for (int i = index; i < list->length - 1; i++) { list->data[i] = list->data[i+1]; } list->length--; return 1;}

取元素c// 取元素int getElement(SeqList *list, int index) { if (index < 0 || index >= list->length) { printf('取元素位置错误

'); return -1; } return list->data[index];}

单链表

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

创建单链表c// 创建单链表Node* createLinkedList() { Node *head = NULL; int value; printf('请输入元素的值,以-1结束输入:

'); 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;}

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

');}

在单链表的第index个位置插入元素c// 在单链表的第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('插入位置错误

'); return; } Node *newNode = (Node *)malloc(sizeof(Node)); newNode->data = element; newNode->next = p->next; p->next = newNode; printf('插入成功 ');}

删除单链表中的第index个元素c// 删除单链表中的第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('删除位置错误

'); return; } Node *temp = p->next; p->next = temp->next; free(temp); printf('删除成功 ');}

取单链表中的第index个元素c// 取单链表中的第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('取元素位置错误

'); return -1; } return p->data;}

示例代码cint 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('

');

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

');

printf('顺序表中的第2个元素:%d

', 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

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

return 0;}

总结

本文介绍了顺序表和单链表的定义和基本操作,并提供了完整的 C 语言代码示例。希望读者通过本文能够更好地理解这两种数据结构,并能够在实际编程中灵活运用。

C语言实现顺序表和单链表数据结构

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

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