首页 > 其他分享 >双向循环链表的创建练习

双向循环链表的创建练习

时间:2024-04-25 12:44:39浏览次数:13  
标签:node head 练习 next 链表 tail 双向 CClist new

include <stdio.h>

include <stdlib.h>

/**

  • @file name: Untitled-1.c
  • @brief 双向链表
  • @author [email protected]
  • @date 2024/04/25
  • @version 1.6 :版本
  • @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;数组元素的个数
    
  • @date 2024/04/25

  • @version 1.6 :版本

  • @note 这个双向循环链表

  • */
    void Create_cclist(CClist **head, int a[], int size){

    *head = NULL; // 初始化头部为NULL
    CClist tail;
    tail=NULL;
    // while(tail->next!=
    head){
    // tail=tail->next;

    // }
    for (int i = 0; i < size; i++) {
    CClist* new_node = (CClist *)malloc(sizeof(CClist));
    if(new_node == NULL){
    perror("CREATE FAIL!");
    exit(EXIT_FAILURE);
    }

    new_node->data = a[i];
    if (*head==NULL){
    new_node->prev=new_node;
    new_node->next=new_node;
    *head=new_node;
    tail=new_node;

    }
    else{
    new_node->prev=tail;
    new_node->next=head;
    tail->next=new_node;
    (
    head)->prev=new_node;
    tail = new_node;

    }
    // new_node->prev = tail;
    // tail->next=new_node;
    // if(head != (head)->next){
    // new_node->next = head;
    // (
    head)->prev = new_node;
    // } else {
    // new_node->next = new_node; // 如果是第一个节点,设置next为NULL
    // }
    // *head = new_node;

    // 注意这里没有设置new->next->prev = new; 因为当i==size-1时,不会有next节点
    

//}
}}
void PrintList(CClist head){
CClist
cur=head;
if(head != NULL){
do{
printf("%d ",cur->data);
cur=cur->next;

    }while(cur!=head);
}

}
// void mergecclist(CClistl,CClistl2){
// (l2)->prev->prev=l;
// (l)->prev->next=l2;

// }
int main() {
int a[] = {3, 5, 2, 55, 33, 86, 33, 7, 3, 2};
// 获取数组大小
int b[]={3,5,3,555,666,777,888,999,111,222};
CClist *L = NULL; // 初始化为空指针
CClist *L2= NULL;
Create_cclist(&L, a, 10); // 使用&获取头部指针的地址
Create_cclist(&L2,a,10);
PrintList(L); // 打印链表内容

// 清理内存


return 0;

}

标签:node,head,练习,next,链表,tail,双向,CClist,new
From: https://www.cnblogs.com/jjjkkklll/p/18157402

相关文章

  • 数据结构——单向循环链表
    一、单向循环链表(一)单向循环链表的构造单向循环链表的尾结点的指针域中必须指向链表的首结点的地址1)构造单向循环链表的结点//单向循环链表中的结点有效数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造单向循环链表的结点,链表中所有结点的数据类型应该......
  • 双向循环链表的增删改查
    数据结构双向循环链表双向循环链表的增删改查/***************************************************************************************filename:1.c*author: [email protected]*date:2024/04/24*function: 双向循环链表的增删......
  • C语言数据结构:双向循环链表的增删操作
    /***********************************************************************************************************设计双向循环链表的接口****Copyright(c)[email protected]**********************************************......
  • 双向循环链表的接口
    双向循环链表的接口头文件#include<stdbool.h>#include<stdio.h>#include<string.h>#include<stdlib.h>​```创建链表、节点//指的是双向循环链表中的结点有效数据类型,用户可以根据需要进行修改hjtypedefintDataType_t;//构造双向循环链表的结点,链表中所有结......
  • 数据结构:双向循环链表的创建·插入·删除
    数据结构:双向循环链表的创建·插入·删除/***@filename:数据结构:双向循环链表的创建·插入·删除*@brief:实现双向循环链表的创建·插入·删除*@author :[email protected]*@date :2024/04/24*@version:1.0*@note:none*CopyRig......
  • 双向循环链表
    双向循环链表原理与应用双向循环链表与双向链表的区别:指的是双向循环链表的首结点中的prev指针成员指向链表的尾结点,并且双向循环链表的尾结点里的next指针成员指向链表的首结点,所以双向循环链表也属于环形结构。双向循环链表各功能实现(1)为了管理双向循环链表,需要构造头结点......
  • 数据结构:双向链表的创建·插入·删除
    数据结构:双向链表的创建·插入·删除/***@filename:数据结构:双向链表的创建·插入·删除*@brief:实现双向链表的创建·插入·删除*@author :[email protected]*@date :2024/04/23*@version:1.0*@note:none*CopyRight(c......
  • 反转链表
    packagemainimport"fmt"typeListNodestruct{ValintNext*ListNode}funcreverseList(head*ListNode)*ListNode{ifhead==nil||head.Next==nil{returnhead}newHead:=reverseList(head.Next)he......
  • 双向循环链表
    /**********************************************************************************************************设计双向链表的接口******************************************************************************************************/include<stdio.h>i......
  • 双向链表和双向循环链表的(创建、插入、删除、遍历)
    V1.02024年4月24日发布于博客园目录目录目录双向链表和双向循环链表的(创建、插入、删除、遍历)设计双向链表的接口创建一个空的双向链表,空链表应该有一个头结点,对链表进行初始化创建新的结点,并对新结点进行初始化(数据域+指针域)创建一个新的结点进行头部插入创建一个新的......