【数据结构】单向循环链表

一、mian函数

cs 复制代码
#include <stdio.h>
#include "./3.looplinklist.h"
int main(int argc, const char *argv[])
{
    looplinklist* head = create_looplinklist();

    insertHead_looplinklist(head,100);
    insertHead_looplinklist(head,200);
    insertHead_looplinklist(head,300);
    show_looplinklist(head);

    insertEnd_looplinklist(head,999);
    insertEnd_looplinklist(head,888);
    insertEnd_looplinklist(head,666);
    show_looplinklist(head);

    delHead_looplinklist(head);
    show_looplinklist(head);

    delEnd_looplinklist(head);
    show_looplinklist(head);

    insertByindex_looplinklist(head,2,55555);
    show_looplinklist(head);                                         
    insertByindex_looplinklist(head,20,10086);
    show_looplinklist(head);

    delByindex_looplinklist(head,4);
    show_looplinklist(head);
    delByindex_looplinklist(head,16);
    show_looplinklist(head);
    return 0;
}

二、功能函数

cs 复制代码
#include <stdio.h>                                                                       
#include <stdlib.h>                                                                      
#include "./3.looplinklist.h"                                                            
                                                                                         
looplinklist*  create_looplinklist()                                                     
{                                                                                        
    looplinklist* head =(looplinklist*)malloc(sizeof(looplinklist));                     
    if(NULL == head)                                                                     
    {                                                                                    
        printf("头结点创建失败,链表创建失败\n");                                        
        return  NULL ;                                                                   
    }                                                                                    
    head->text.len = 0;                                                                  
    head->next= head;                                                                    
                                                                                         
    return head;                                                                         
}                                                                                        
                                                                                         
//遍历                                                                                   
void show_looplinklist(looplinklist*head)                                                
{                                                                                        
    looplinklist*p=head;                                                                 
    while(p->next != head)                                                               
    {                                                                                    
        p=p->next;                                                                       
        printf("%d ",p->text.data);                                                      
    }                                                                                    
    printf("\n");                                                                        
    return ;                                                                             
}                                                                                        
                                                                                         
//头插                                                                                   
void insertHead_looplinklist(looplinklist*head,dataType num)                             
{                                                                                        
    looplinklist* temp = (looplinklist*)malloc(sizeof(looplinklist));                    
    if(NULL == temp)                                                                     
    {                                                                                    
        printf("结点创建失败,头插失败\n");                                              
        return ;                                                                         
    }                                                                                    
    temp->next = NULL ;                                                                  
    temp->text.data = num;                                                               
    temp->next = head->next;                                                             
    head->next = temp;                                                                   
    head->text.len++;                                                                    
    return ;                                                                             
}                                                                                        
                                                                                         
                                                                                      
//尾插                                                                                
void insertEnd_looplinklist(looplinklist*head,dataType num)                           
{                                                                                     
    looplinklist* p =head;                                                            
    while(p->next != head)                                                            
    {                                                                                 
        p=p->next;                                                                    
    }                                                                                 
                                                                                      
    looplinklist* temp = (looplinklist*)malloc(sizeof(looplinklist));                 
    if(NULL == temp)                                                                  
    {                                                                                 
        printf("结点创建失败,尾插失败\n");                                           
        return ;                                                                      
    }                                                                                 
                                                                                      
    temp->next = NULL ;                                                               
    temp->text.data = num;                                                            
                                                                                      
    temp->next = head;                                                                
    p->next = temp;                                                                   
    head->text.len++;                                                                 
    return ;                                                                          
}                                                                                     
 
//判空                                                                                     
int isEmpty_looplinklist(looplinklist*head)                                           
{                                                                                     
    if(head->next == head)                                                            
    {                                                                                 
        return 1;                                                                     
    }                                                                                 
    else                                                                              
    {                                                                                 
        return 0;                                                                     
    }                                                                                 
}   
                                                                                  
//头删                                                              
void delHead_looplinklist(looplinklist*head)                        
{                                                                   
    if(isEmpty_looplinklist(head))                                  
    {                                                               
        printf("链表为空\n");                                       
        return ;                                                    
    }                                                               
                                                                    
    looplinklist* temp =head->next;                                 
    head->next=head->next->next;                                    
    head->text.len--;                                               
    free(temp);                                                     
    return;                                                         
}                                                                   
                                                                    
//尾删                                                              
void delEnd_looplinklist(looplinklist*head)                         
{                                                                   
    if(isEmpty_looplinklist(head))                                  
    {                                                               
        printf("链表为空\n");                                       
        return ;                                                    
    }                                                               
                                                                    
    looplinklist*p=head;                                            
    while(p->next->next != head)                                    
    {                                                               
        p= p->next;                                                 
    }                                                               
                                                                    
    looplinklist*temp=p->next;                                      
    p->next = head;                                                 
    head->text.len--;                                               
    free(temp);                                                     
    return;                                                         
}    
                                                               
//按位置插入                                                                                
void insertByindex_looplinklist(looplinklist*head,int index,dataType num)                   
{                                                                                           
    if(index<1)                                                                             
    {                                                                                       
        printf("位置非法,插入失败\n");                                                     
        return ;                                                                            
    }                                                                                       
    int i=1;                                                                                
    looplinklist*p=head;                                                                    
    for(i;i<(index%head->text.len);i++)                                                     
    {                                                                                       
        p=p->next;                                                                          
    }                                                                                       
    looplinklist*temp = (looplinklist*)malloc(sizeof(looplinklist));                        
    if(NULL == temp)                                                                        
    {                                                                                       
        printf("结点申请失败,插入失败\n");                                                  
        return ;                                                                            
    }                                                                                       
    temp->text.data=num;                                                                    
    temp->next=p->next;                                                                     
    p->next = temp;                                                                         
                                                                                            
    head->text.len++;                                                                       
    return ;                                                                                
}                                                                                           

//按位置删除                                                                      
void delByindex_looplinklist(looplinklist*head,int index)                         
{                                                                                 
    if(index<1)                                                                   
    {                                                                             
        printf("位置非法,删除失败\n");                                           
        return ;                                                                  
    }                                                                             
    if(isEmpty_looplinklist(head))                                                
    {                                                                             
        printf("链表为空,无法进行删除\n");                                       
        return ;                                                                  
    }                                                                             
    int i=1;                                                                      
    looplinklist*p=head;                                                          
    for(i;i<(index%head->text.len);i++)                                           
    {                                                                             
        p=p->next;                                                                
    }                                                                             
    looplinklist*temp=p->next;                                                    
    p->next=p->next->next;                                                        
    free(temp);                                                                   
    head->text.len--;                                                             
    return;                                                                       
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

三、头文件

cs 复制代码
#ifndef __looplink_H__
#define __looplink_H__

typedef int dataType;

union msg{
    dataType data;
    int len;                                                                                
};

typedef struct node{
    union msg text;
    struct node* next;
}looplinklist;
looplinklist*  create_looplinklist();
void insertHead_looplinklist(looplinklist*head,dataType num);

void show_looplinklist(looplinklist*head);
void insertEnd_looplinklist(looplinklist*head,dataType num);
void delHead_looplinklist(looplinklist*head);
void delEnd_looplinklist(looplinklist*head);
void insertByindex_looplinklist(looplinklist*head,int index,dataType num);
void delByindex_looplinklist(looplinklist*head,int index);

#endif

                                                                                            
                                                                                            
                                                                                            

四、运行结果:

相关推荐
xxwxx__5 小时前
C++ STL set 与 map 全套详解:关联式容器、红黑树底层、代码坑点、刷题实战
数据结构·c++
程曦曦5 小时前
MySQL 生产库误删 98 张表后的时间点恢复实战:从 binlog 解析到资金对账
linux·数据结构·其他·算法·ubuntu·运维开发
郝学胜-神的一滴5 小时前
Effective Python 条款 13:善用星号解包,告别下标切片拆分的坑
服务器·开发语言·数据结构·python·程序人生·pycharm
Logic1016 小时前
C语言/数据结构位运算题解:异或XOR找出流水线上的“独特零件编号“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
张小姐的猫6 小时前
【AI大模型接入SDK】 —— 数据管理 & 与Session模块进行联动
数据结构·数据库·c++·人工智能·python·chatgpt
careathers7 小时前
【数据结构】栈
java·数据结构
mmmmath_37 小时前
LeetCode.018.四数之和
数据结构·算法·leetcode
淡海水8 小时前
11-02-Unity-Mono-vs-IL2CPP-两种脚本后端的数据结构行为差异
数据结构·unity·游戏引擎·il2cpp·mono
梦帮科技8 小时前
Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层
css·数据结构·链表·正则表达式·node.js·json·html5
雨落在了我的手上9 小时前
Java数据结构(十三):排序
数据结构