双向循环链表的创建练习

include <stdio.h>

include <stdlib.h>

/**

  • @file name: Untitled-1.c
  • @brief 双向链表
  • @author 2492834335@qq.com
  • @date 2024/04/25
  • @version 1.6 :版本
  • @property :属性介绍
  • @note
  • CopyRight (c) 2023-2024 2492834335@qq.com 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;

}

posted on 2024-04-25 12:39  jjjkkklll  阅读(6)  评论(0编辑  收藏  举报

导航