循环单链表及其实现

lixiangrong
2024-01-05 / 38 评论 / 82 阅读 / 正在检测是否收录...
#include <stdio.h>
#include <stdlib.h>

typedef int dataType;

typedef struct linkNode
{
    dataType data;
    struct linkNode *next;
}node,*linkList;

// 1.初始化不带头结点的循环单链表
void init(linkList *head)
{
    *head = NULL;
}

// 2.获取循环单链表的尾结点
node *rear(linkList head)
{
    node *p = head;
    while (p)
    {
        if(p->next == head)
            break;
        p = p->next;
    }
    return p;
}

// 3.输出循环单链表各结点的值
void display(linkList head)
{
    node *p = head;
    if(!p)
    {
        printf("循环单链表为空!\n");
        return;
    }
    while (p->next != head)
    {
        printf("%d ",p->data);
        p = p->next;
    }
    printf("%d\n",p->data);
}

// 4.查找值为x的结点
node* findX(linkList head, dataType x)
{
    node *p = head;
    if(!p)
    {
        printf("循环单链表为空!\n");
        return head;
    }
    while (p->next != head)
    {
        if(p->data == x)
            return p;
        p = p->next;
    }
    if(p->data == x)
        return p;
    else return NULL;
}

// 5.查找第i个结点
node *find(linkList head, int i)
{
    node *p = head;
    if(i < 1)
    {
        printf("索引非法!\n");
        return NULL;
    }
    if(!p)
    {
        printf("循环单链表为空!\n");
        return head;
    }
    int j = 1;
    while (p->next != head && i != j)
    {
        p = p->next;
        j++;
    }
    if(i == j)
        return p;
    return NULL;
}

// 6.循环单链表的尾部插入结点
void rearInsert(linkList *head, dataType x)
{
    node *p = *head,*q;
    q = (node*) malloc(sizeof(node));
    q->data = x;
    if(!p)
    {
        q->next = q;
        *head = q;
        return;
    }
    p = rear(*head);
    p->next = q;
    q->next = *head;
}

// 7.在循环单链表的第i个位置后插入元素x
void insert(linkList *head, int i, dataType x)
{
    if(i < 0)
    {
        printf("非法的插入位置,无法插入!\n");
        return;
    }
    node *p = *head,*q,*r;
    q = (node*) malloc(sizeof(node));
    q->data = x;
    if(i == 0) // 当要在链表最前方插入时
    {
        if(!p) // 链表为空时
        {
            *head = q;
            (*head)->next = *head;
            return;
        } // 链表非空时
        r = rear(*head); // 找到尾结点
        q->next = *head;
        r->next = q;
        *head = q;
        return;
    }
    p = find(*head,i); // 其他位置插入则需要找到插入位置
    if(!p)
        printf("非法的位置,无法插入!\n");
    else
    {
        if(p->next == (*head)) // 如果在尾结点后插入
        {
            p->next = q;
            q->next = *head;
            return;
        }
        q->next = p->next; // 中间的位置插入
        p->next = q;
    }
}

// 6.删除循环单链表中值为x的元素
void del(linkList *head, dataType x)
{
    node *p = *head,*q;
    if(!p)
    {
        printf("链表为空,无法删除!\n");
        return;
    }
    p = findX(p,x);
    if(!p)
    {
        printf("未找到这样的结点,无法删除!\n");
        return;
    }
    if((*head)->next == *head) // 只有一个结点时
    {
        free(p);
        *head = NULL;
        return;
    }
    if(p->next == *head) // 如果是删除最后一个结点
    {
        if(p == (*head)->next) // 只有两个结点时
        {
            (*head)->next = *head;
            free(p);
        } else // 多于两个结点时
        {
           p->data = p->next->data;
           q = p->next;
           p->next = p->next->next;
           *head = p;
           free(q);
            return;
        }
    } else
    {
        p->data = p->next->data; // 中间结点的删除
        q = p->next;
        p->next = p->next->next;
        free(q);
    }
}

int main()
{
    linkList list; // 声明循环单链表
    init(&list); // 初始化空的不带头结点的循环单链表
    display(list); // 输出单链表
    for (int i = 1; i <= 5; i++)
        rearInsert(&list,i);
    display(list);
    int i = 5;
    node *n = find(list,i); // 查找第i个元素
    if(n)
        printf("链表的第%d个元素是%d\n",i,n->data);
    else
        printf("链表访问越界!\n");
    dataType x = 6;
    printf("在第%d个位置后面插入元素%d\n",i,x);
    insert(&list,i,x);
    display(list);
    printf("删除一个值为%d的元素\n",x);
    del(&list,x);
    display(list);
    return 0;
}
0

评论 (38)

取消
  1. 头像
    siiyxcphab
    Windows 10 · Google Chrome

    热血传奇:独家揭秘私服家族战震撼视频,领略战火激情!:https://501h.com/danzhiye/21755.html

    回复
  2. 头像
    wbeaygpyon
    Windows 10 · Google Chrome

    《惩罚1973》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/115734.html

    回复
  3. 头像
    awrwjozfkr
    Windows 10 · Google Chrome

    《新特警判官》动作片高清在线免费观看:https://www.jgz518.com/xingkong/52137.html

    回复
  4. 头像
    fedbnpnyja
    Windows 10 · Google Chrome

    你的文章内容非常专业,让人佩服。 https://www.yonboz.com/video/22295.html

    回复
  5. 头像
    pyezrqouuu
    Windows 10 · Google Chrome

    《阿敏将军》记录片高清在线免费观看:https://www.jgz518.com/xingkong/120731.html

    回复
  6. 头像
    iijjiihhzl
    Windows 10 · Google Chrome

    《甜蜜小谎言》爱情片高清在线免费观看:https://www.jgz518.com/xingkong/75832.html

    回复
  7. 头像
    ryfsapgqut
    Windows 10 · Google Chrome

    什么传奇私服游戏挣钱模式最有效?:https://501h.com/danzhiye/2024-09-23/37359.html

    回复
  8. 头像
    jdpoagnhav
    Windows 10 · Google Chrome

    《夏洛克的孩子们》日本剧高清在线免费观看:https://www.jgz518.com/xingkong/57583.html

    回复
  9. 头像
    tvpvwxeedd
    Windows 10 · Google Chrome

    真棒!

    回复
  10. 头像
    gpcbsecozn
    Windows 10 · Google Chrome

    你的文章充满了创意,真是让人惊喜。 https://www.4006400989.com/qyvideo/42107.html

    回复
  11. 头像
    jesrdbfqdq
    Windows 10 · Google Chrome

    你的文章充满了智慧,让人敬佩。 https://www.yonboz.com/video/69057.html

    回复
  12. 头像
    vcdposqcbn
    Windows 10 · Google Chrome

    你的文章让我感受到了不一样的风景,谢谢分享。 http://www.55baobei.com/zHu6cmmL3S.html

    回复
  13. 头像
    eynonmllll
    Windows 10 · Google Chrome

    你的文章充满了创意,真是让人惊喜。 https://www.4006400989.com/qyvideo/42107.html

    回复
  14. 头像
    yzevpshwdg
    Windows 10 · Google Chrome

    你的文章内容非常卖力,让人点赞。 https://www.yonboz.com/video/89959.html

    回复
  15. 头像
    xhhdkyghyu
    Windows 10 · Google Chrome

    博主太厉害了!

    回复
  16. 头像
    rmzzlqoadu
    Windows 10 · Google Chrome

    你的文章让我心情愉悦,真是太棒了! http://www.55baobei.com/hrvoZKeP0o.html

    回复
  17. 头像
    mldnxhovcp
    Windows 10 · Google Chrome

    《一路向爱》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/55657.html

    回复
  18. 头像
    atrqjinmjl
    Windows 10 · Google Chrome

    《只有你2014》爱情片高清在线免费观看:https://www.jgz518.com/xingkong/95648.html

    回复
  19. 头像
    sukvtlkxiu
    Windows 10 · Google Chrome

    《单身撩妹记》泰国剧高清在线免费观看:https://www.jgz518.com/xingkong/106745.html

    回复
  20. 头像
    dltpadafkp
    Windows 10 · Google Chrome

    《爱不过徒有虚名(原声音乐特别收藏版 )》短片剧高清在线免费观看:https://www.jgz518.com/xingkong/153554.html

    回复
  21. 头像
    cklkwzxvvi
    Windows 10 · Google Chrome

    你的文章内容非常精彩,让人回味无穷。 http://www.55baobei.com/YDZcGFbww6.html

    回复
  22. 头像
    xfdmnumhjr
    Windows 10 · Google Chrome

    《百万元与苦虫女》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/83941.html

    回复
  23. 头像
    eycnywigyg
    Windows 10 · Google Chrome

    《只有你2014》爱情片高清在线免费观看:https://www.jgz518.com/xingkong/95648.html

    回复
  24. 头像
    eatsrdpasf
    Windows 10 · Google Chrome

    你的文章让我感受到了无尽的欢乐,谢谢分享。 http://www.55baobei.com/HAuBemfaPO.html

    回复
  25. 头像
    rddpbamkkv
    Windows 10 · Google Chrome

    你的文章让我感受到了无尽的欢乐,谢谢分享。 https://www.yonboz.com/video/78867.html

    回复
  26. 头像
    onpoanlylw
    Windows 10 · Google Chrome

    你的文章总是能给我带来欢乐,谢谢你! http://www.55baobei.com/QxFmmK4xhA.html

    回复
  27. 头像
    hdxphnsdvi
    Windows 10 · Google Chrome

    《致光之君》日本剧高清在线免费观看:https://www.jgz518.com/xingkong/46.html

    回复
  28. 头像
    rgxpjqcime
    Windows 10 · Google Chrome

    你的文章让我感受到了无尽的欢乐,谢谢分享。 http://www.55baobei.com/W3gSkz3oy9.html

    回复
  29. 头像
    jxkxjvuugt
    Windows 10 · Google Chrome

    你的文章总是能给我带来欢乐,谢谢你! http://www.55baobei.com/X5SAs5z1ME.html

    回复
  30. 头像
    eopuzecuot
    Windows 10 · Google Chrome

    《一路向爱》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/55657.html

    回复
  31. 头像
    wegsrdbffs
    Windows 10 · Google Chrome

    你的文章让我感受到了无尽的欢乐,谢谢分享。 http://www.55baobei.com/W3gSkz3oy9.html

    回复
  32. 头像
    yrsrwitywq
    Windows 10 · Google Chrome

    《致光之君》日本剧高清在线免费观看:https://www.jgz518.com/xingkong/46.html

    回复
  33. 头像
    hccgzfwpoh
    Windows 10 · Google Chrome

    《糟糕我假皇子的身份要曝光了》短片剧高清在线免费观看:https://www.jgz518.com/xingkong/13846.html

    回复
  34. 头像
    vgzlelnliu
    Windows 10 · Google Chrome

    《盲目的丈夫们》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/84142.html

    回复
  35. 头像
    ombhrbptgs
    Windows 10 · Google Chrome

    《糟糕我假皇子的身份要曝光了》短片剧高清在线免费观看:https://www.jgz518.com/xingkong/13846.html

    回复
  36. 头像
    zmipxdofom
    Windows 10 · Google Chrome

    《全员加速中第三季》大陆综艺高清在线免费观看:https://www.jgz518.com/xingkong/34266.html

    回复
  37. 头像
    rghzqwonts
    Windows 10 · Google Chrome

    《圣诞奇遇结良缘》喜剧片高清在线免费观看:https://www.jgz518.com/xingkong/57546.html

    回复
  38. 头像
    xubnzevhvu
    Windows 10 · Google Chrome

    《盲目的丈夫们》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/84142.html

    回复