首页 > 其他分享 >双向循环连链表的另类实现

双向循环连链表的另类实现

时间:2024-04-24 20:57:12浏览次数:21  
标签:node head 另类 链表 双向 CClist new NULL

`#include <stdio.h>

include <stdlib.h>

/**

  • @file name: Untitled-1.c
  • @brief 双向链表的另类实现
  • @author [email protected]
  • @date 2024/04/24
  • @version 1.0 :版本
  • @property :属性介绍
  • @note
  • CopyRight (c) 2023-2024 [email protected] All Right Reseverd
    */

typedef struct cclist{
int data;
struct cclist *prev;
struct cclist *next;
} CClist;

/**

  • @function name: Create_cclist
  • @brief 根据一个给定的数组,建立一个另类的双向不循环链表
  • @param
  •     head  :略
    
  •     a :  给定的一个数组
    
  •     size;数组元素的个数
    
  • @retval void
  • @date 2024/04/24
  • @version 1.0 :版本
  • @note 这个双向不循环链表是把新结点的前指针和后指针都指向链表头部,再把链表头部前指针指向新结点。
  •     最后在新结点设为新的头部结点。和普通的结点头部结点不同的是,它的前指针指向下一个元素。
    

*/
void Create_cclist(CClist **head, int a[], int size){
CClist *new_node;
*head = NULL; // 初始化头部为NULL

for (int i = 0; i < size; i++) {
    new_node = (CClist *)malloc(sizeof(CClist));
    if(new_node == NULL){
        perror("CREATE FAIL!");
        exit(EXIT_FAILURE);
    }
    
    new_node->data = a[i];
    new_node->prev = *head;
    if(*head != NULL){
        new_node->next = *head;
        (*head)->prev = new_node;
    } else {
        new_node->next = NULL; // 如果是第一个节点,设置next为NULL
    }
    *head = new_node; 
       
    
    // 注意这里没有设置new->next->prev = new; 因为当i==size-1时,不会有next节点

}
}
void PrintList(CClist *head){
while(head != NULL){
printf("%d ", head->data);
head = head->next;
}
}

int main() {
int a[] = {3, 5, 2, 55, 33, 86, 33, 7, 3, 2};
// 获取数组大小

CClist *L = NULL; // 初始化为空指针
Create_cclist(&L, a, 10); // 使用&获取头部指针的地址

PrintList(L); // 打印链表内容

// 清理内存
CClist *temp;
while(L != NULL){
    temp = L;
    L = L->next;
    free(temp);
}

return 0;

}`

标签:node,head,另类,链表,双向,CClist,new,NULL
From: https://www.cnblogs.com/jjjkkklll/p/18156319

相关文章

  • 双向循环链表:(创建、插入、遍历、求长、查找、删除、排序、销毁)待测
    目录一、双向循环链表存在的意义二、节点的定义三:实现1:创建链表(即创建一个空链表)2:创建新结点3:遍历4:插入头插入尾插入中间插入一、双向循环链表存在的意义数组这样的结构提供了连续内存的访问和使用,链表是对内存零碎空间的有效组织和使用,双向循环链表增大了访问的自由度。二、......
  • 数据结构-双循环链表的插入
    数据结构-双循环链表插入/*************************************************/***@filename: DcirLLinkInsert*@brief对双向循环链表插入的功能实现*@[email protected]*@date2024/04/24*@version1.0:在下坂本,有何贵干*@property:none......
  • 单向链表的插入、与删除
    链表在C语言中,链表是一种常用的数据结构,它可以用来存储一系列的元素。链表中的每个元素都存储了下一个元素的地址,从而形成了一条链。这种结构使得在插入和删除元素时不需要像数组那样移动大量元素,因此它在插入和删除操作多的情况下有很大的优势。在C语言中,链表可以有多种实现方......
  • 数据结构-双循环链表的插入
    数据结构-双循环链表插入/*************************************************/***@filename: DcirLLinkInsert*@brief对双向循环链表插入的功能实现*@[email protected]*@date2024/04/24*@version1.0:在下坂本,有何贵干*@property:none......
  • 单向循环链表大纲
    单向循环链表大纲/*************************************************************filename:*author:[email protected]*date:2024/04/23*function:*note:None**CopyRight(c)2023-20241987032607......
  • 双向链表接口设计
    双向链表接口设计/***@filename:双向链表接口设计(非循环接口)*@brief*@[email protected]*@date2024/04/23*@version1.0:*@property:*@note*CopyRight(c)[email protected]*/构造双向循环链表结构体//指......
  • C语言单向循环链表的增删操作
    /***********************************************************************************************************设计单向循环链表的接口****Copyright(c)[email protected]**********************************************......
  • 删除单链表中最小值的结点
    /***********************************************filename:demo14.c*author:[email protected]*date:2024/4/2*function:设计1个函数,实现删除单链表中最小值的结点*note:None*CopyRight(c)2023-2024邮箱AllRightReseverd***********************************......
  • 数据结构:双向链表的创建·插入·删除
    数据结构:双向链表的创建·插入·删除/***@filename:数据结构:双向链表的创建·插入·删除*@brief:实现双向链表的创建·插入·删除*@author :[email protected]*@date :2024/04/23*@version:1.0*@note:none*CopyRight(c......
  • 双向链表(不循环)
    双向链表双向链表的原理与应用如果想要提高单向链表或者单向循环链表的访问速度,则可以在链表中的结点中再添加一个指针域,让新添加的指针域指向当前结点的直接前驱的地址,也就意味着一个结点中有两个指针域(prev+next),也被称为双向链表(DoubleLinkedList)。单向循环链表实现分析......