当前位置:首页C语言 > 正文

c语言数据结构顺序表和链表

作者:野牛程序员:2024-01-03 21:27:52C语言阅读 2657

顺序表和链表都是用于存储和组织数据的数据结构。顺序表是一种基于数组的数据结构,它使用一段连续的内存空间来存储元素。链表则是一种通过节点之间的指针来连接元素的数据结构,节点可以在内存中不连续地分布。

顺序表的优点是随机访问速度快,因为可以通过索引直接访问元素。但是插入和删除操作可能需要移动大量元素,特别是在中间插入或删除元素时。

链表的优点是插入和删除操作相对较快,因为只需要修改节点的指针,而不需要移动大量元素。但是随机访问速度相对较慢,因为必须从头开始按顺序遍历节点。

在C语言中,顺序表可以通过数组实现,例如:

#define MAX_SIZE 100

typedef struct {
    int array[MAX_SIZE];
    int length;
} SeqList;

链表可以通过节点和指针实现,例如:

typedef struct Node {
    int data;
    struct Node* next;
} ListNode;

在实际应用中,选择顺序表还是链表取决于特定的需求。如果需要频繁随机访问元素,并且数据量较大且不经常插入或删除,顺序表可能更合适。如果需要频繁插入或删除元素,或者数据量较小,链表可能更合适。

顺序表的简单实现:

#include <stdio.h>

#define MAX_SIZE 100

typedef struct {
    int array[MAX_SIZE];
    int length;
} SeqList;

void initSeqList(SeqList* list) {
    list->length = 0;
}

void insertIntoSeqList(SeqList* list, int value) {
    if (list->length < MAX_SIZE) {
        list->array[list->length++] = value;
        printf("Inserted %d into the sequence list.\\n", value);
    } else {
        printf("Sequence list is full. Cannot insert %d.\\n", value);
    }
}

void displaySeqList(SeqList* list) {
    printf("Sequence List: ");
    for (int i = 0; i < list->length; ++i) {
        printf("%d ", list->array[i]);
    }
    printf("\\n");
}

int main() {
    SeqList mySeqList;
    initSeqList(&mySeqList);

    insertIntoSeqList(&mySeqList, 10);
    insertIntoSeqList(&mySeqList, 20);
    insertIntoSeqList(&mySeqList, 30);

    displaySeqList(&mySeqList);

    return 0;
}

链表的简单实现:

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

typedef struct Node {
    int data;
    struct Node* next;
} ListNode;

void insertIntoLinkedList(ListNode** head, int value) {
    ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
    newNode->data = value;
    newNode->next = *head;
    *head = newNode;
    printf("Inserted %d into the linked list.\\n", value);
}

void displayLinkedList(ListNode* head) {
    printf("Linked List: ");
    while (head != NULL) {
        printf("%d ", head->data);
        head = head->next;
    }
    printf("\\n");
}

int main() {
    ListNode* myLinkedList = NULL;

    insertIntoLinkedList(&myLinkedList, 10);
    insertIntoLinkedList(&myLinkedList, 20);
    insertIntoLinkedList(&myLinkedList, 30);

    displayLinkedList(myLinkedList);

    return 0;
}

这两个程序分别演示了顺序表和链表的基本操作。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击