数据结构 C语言实现循环单链表的实例

首先,在开始讲解数据结构中循环单链表的实现前,需要明确循环单链表的概念以及其与单链表的区别。

循环单链表是一种链式存储结构,与单链表不同的是,在循环单链表的尾部也可以指向链表的头部,形成一个环。因此,我们可以通过尾部的指针来遍历整个循环单链表。

接下来,为了方便理解和学习,我们将使用C语言来实现循环单链表的实例。下面分几个步骤来讲解。

1. 定义结构体和创建循环单链表

首先,我们需要定义结构体来存储每个节点的数据和指向下一个节点的指针。此外,还需要定义一个头节点,用于记录链表的头部位置。

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

Node *head = NULL;

在定义好结构体和头节点后,我们需要编写一个函数来创建循环单链表,可以根据用户输入的数据,依次插入链表节点。

void createList()
{
    int n, i, data;
    Node *prevNode, *currNode;
    printf("Input the number of nodes: ");
    scanf("%d", &n);

    head = (Node*) malloc(sizeof(Node));

    if(head == NULL)
    {
        printf("Memory can not be allocated.");
        return;
    }

    // Head node does not contain any data, its next points to first node
    head->data = 0;
    head->next = NULL;

    prevNode = head;
    for(i = 0; i < n; i++)
    {
        printf("Input data for node %d: ", i + 1);
        scanf("%d", &data);

        currNode = (Node*) malloc(sizeof(Node));

        if(currNode == NULL)
        {
            printf("Memory can not be allocated.");
            break;
        }

        currNode->data = data;
        currNode->next = NULL;

        prevNode->next = currNode;
        prevNode = currNode;

        // Set the last node next to the head node
        if(i == n - 1)
        {
            currNode->next = head;
        }
    }
}

2. 遍历循环单链表

遍历循环单链表与遍历单链表的方式基本相同,只需要将遍历的终止条件做出相应的改变即可。

void printList()
{
    Node *currNode = head->next;
    printf("\nPrint List:\n");
    do
    {
        printf("%d\n", currNode->data);
        currNode = currNode->next;
    }while(currNode != head->next);
}

3. 插入节点

通过上面的代码,我们已经实现了循环单链表的创建和遍历操作,但是链表数据可能会动态增加,因此需要编写函数来插入新的节点。

void insertNode()
{
    Node *currNode = head->next;
    int data, loc, i = 1;

    printf("Enter location to insert a node: ");
    scanf("%d", &loc);

    while(i < loc-1 && currNode != head)
    {
        currNode = currNode->next;
        i++;
    }

    if(currNode == head && i != loc)
    {
       printf("Invalid location.\n");
       return;
    }

    printf("Enter data to insert a node at location %d: ", loc);
    scanf("%d", &data);

    Node *newNode=(Node *)malloc(sizeof(Node));
    newNode->data=data;

    newNode->next=currNode->next;
    currNode->next=newNode;

    if(currNode==head && loc!=1)
    {
       printf("Invalid location.\n");
       return;
    }
}

示例说明

假设我们要构建一个包含三个节点的循环单链表,并按顺序输入三个整数。

Input the number of nodes: 3
Input data for node 1: 10
Input data for node 2: 20
Input data for node 3: 30

执行完上述代码后,我们已经成功创建了一个包含三个节点的循环单链表。

接下来,让我们遍历链表,查看节点数据。

Print List:
10
20
30

我们可以看到,成功遍历了整个链表。

接着,我们尝试在第二个位置插入一个新的节点,并将数据设置为40。

Enter location to insert a node: 2
Enter data to insert a node at location 2: 40

最后,再次遍历链表,查看新的节点是否成功插入。

Print List:
10
40
20
30

可以看到,我们成功地在指定位置插入了一个新节点,并且数据正确。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:数据结构 C语言实现循环单链表的实例 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • java编程队列数据结构代码示例

    下面是“Java编程队列数据结构代码示例”的完整攻略。 什么是队列 队列是一种有序的数据结构,特点是先进先出(FIFO)。队列中不管是插入操作还是删除操作,都是在队列的两端进行的,插入操作在队列的尾部进行,删除操作在队列的头部进行。队列的一个重要用途是在计算机的操作系统中,实现进程和所有需要等待资源的实体之间的交互。 队列的实现 队列数据结构可以采用数组或链…

    数据结构 2023年5月17日
    00
  • 数据结构之数组翻转的实现方法

    下面是数据结构之数组翻转的实现方法的详细攻略。 1. 问题描述 在数组中,将元素以轴对称的方式进行翻转,即将数组的第一个元素和最后一个元素交换,第二个元素和倒数第二个元素交换,以此类推。 例如,对于数组[1, 2, 3, 4, 5],经过翻转后变成[5, 4, 3, 2, 1]。 2. 解法讲解 2.1 方法一:双指针法 双指针法是常用的一种方法,可以实现两…

    数据结构 2023年5月17日
    00
  • JavaScript数据结构Number

    JavaScript数据结构Number 简介 JavaScript中的Number是一种表示数字的数据类型,包括整数和浮点数。Number类型的值是不可变的。 数字类型(Number)的创建 数字类型可以通过直接赋值的方式创建,如: let num = 10; // 整数 let floatNum = 3.14; // 浮点数 另外,JavaScript还…

    数据结构 2023年5月17日
    00
  • C++数据结构与算法之双缓存队列实现方法详解

    C++数据结构与算法之双缓存队列实现方法详解 引言 在实际开发中,双缓存队列是一个非常常见的数据结构,主要用来解决多线程情况下的数据同步问题。本篇文章将详细介绍如何使用C++语言实现双缓存队列。 双缓存队列简介 双缓存队列是一种常用的同步数据结构,它并非一个标准库中的容器,通常需要手动实现。双缓存队列维护着两个缓存区,一个当前使用的缓存区,一个需要被更新的缓…

    数据结构 2023年5月17日
    00
  • C语言线性表之双链表详解

    C语言线性表之双链表详解 前言 本教程将详细介绍C语言中双链表的实现方法以及相关操作,适合有一定C语言基础的读者。 双链表定义 双链表是一种常见的数据结构,与单链表不同,双链表中每个节点不仅有指向后续节点的指针,还有指向前续节点的指针,即“双向链表”。 双链表的节点结构体可以定义如下: typedef struct double_node{ int data…

    数据结构 2023年5月17日
    00
  • C++超详细讲解单链表的实现

    首先我们来了解一下单链表的概念。 单链表是一种常见的数据结构,在计算机科学中被广泛使用。它是由节点所组成的数据结构,其中每个节点都包含两部分,一个是存储数据的元素,另一个是指向下一个节点的指针。单链表的首节点被称为头部,而最后一个节点则被称为尾部。单链表可以通过在头部插入和删除元素来实现高效地数据操作。接下来我们将讲解如何实现一个 C++ 版的单链表。 实现…

    数据结构 2023年5月17日
    00
  • C语言数据结构与算法之图的遍历(一)

    我来给您详细讲解一下“C语言数据结构与算法之图的遍历(一)”的完整攻略。 简介 本篇攻略主要介绍了图的遍历问题。图是由若干个点和连接这些点的边构成的数据结构,常用来表示复杂的关系和网络。图的遍历就是从图的某一点开始,按照一定的规则沿着边逐个访问图中所有的点,不重不漏地遍历整个图。 在本篇攻略中,我们将探讨图的深度优先遍历(DFS)和广度优先遍历(BFS)两种…

    数据结构 2023年5月17日
    00
  • 在matlab中创建类似字典的数据结构方式

    当需要使用类似字典的数据结构时,Matlab中可以使用结构体来实现。结构体是一种有序的数据集合,每个元素都可以包含不同类型的数据(如字符串、数值等),并通过指定一个名称来唯一地标识该元素。 创建一个空结构体 使用struct函数可以创建一个空的结构体,可以使用下面的代码: st = struct; 添加键值对 可以将键值对添加到结构体中,可以使用下面的代码向…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部