• 单向循环链表-简单


    源程序:

    #include <stdio.h>

    #include <stdlib.h>

    typedef struct node

    {

      int data;

      struct node *next;

    }linklist;

    //创建单向循环链表

    linklist *creatlist()

    {

      linklist *head, *p, *rear;

      int x;

      head = (linklist *)malloc(sizeof(linklist));

      head->next = NULL;

      rear = head;

      printf("请输入链表内容(整数),以0结束: ");

      scanf("%d", &x);

      while (x)

      {

        p = (linklist *)malloc(sizeof(linklist));

        p->data = x;

        rear->next = p;

        rear = p;

        scanf("%d", &x);

      }

      rear->next = head;//尾指针指向头结点

      return rear;

    }

    //删除单向循环链表中指定的结点

    void delete_key(linklist *rear, int key)

    {

      linklist *p, *q;

      int deleted = 0;//用于标记是否删除过

      p = rear->next;

      q = p->next;

      while (q != rear->next)

      {

        if (q->data == key && q != rear)

        {

          p->next = q->next;

          free(q);

          q = p->next;

          deleted = 1;

        }

        else if (q->data == key && q == rear)

        {

          p->next = q->next;

          free(q);

          q = p->next;

          deleted = 1;

        }

        p = q;

        q = q->next;

        /* if(q->data==key && q==rear)  //如果删除的是最后一个结点

        {

          p->next=q->next;

          free(q);

          q=p->next;

          deleted=1;

        }

        */

      }

      if (deleted)

        printf("已删除! ");

      else

        printf("没有找到该结点! ");

    }

    //输出单循环链表

    void print(linklist *rear)

    {

      linklist *p;

      printf(" 当前链表如下: ");

      p = rear->next->next;

      while (p != rear->next)

      {

        printf("%5d", p->data);

        p = p->next;

      }

      printf(" ");

    }

     int main()

    {

      linklist *rear;

      rear = creatlist();

      print(rear);

      //删除循环链表中指定的值

      int k;

      printf("删除循环链表中指定的值");

      scanf("%d", &k);

      delete_key(rear, k);

      print(rear);

      system("pause");

      return 1;

    }

     运行结果:

  • 相关阅读:
    比开源快30倍的自研SQL Parser设计与实践
    集群镜像:实现高效的分布式应用交付
    阿里云中间件首席架构师李小平:云原生实践助力企业高效创新
    大型企业多账号管理“安全心法”
    数据的“敏捷制造”,DataWorks一站式数据开发治理范式演进
    Scheduled SQL: SLS 大规模日志上的全局分析与调度
    基于 Scheduled SQL 对 VPC FlowLog 实现细粒度时间窗口分析
    汽车之家:基于 Flink + Iceberg 的湖仓一体架构实践
    详细介绍Oracle数据库的聚簇技术
    处理百万级以上的数据提高查询速度的方法
  • 原文地址:https://www.cnblogs.com/duanqibo/p/11841152.html
Copyright © 2020-2023  润新知