zoukankan      html  css  js  c++  java
  • 单向循环链表-简单

    源程序:

    #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;

    }

     运行结果:

  • 相关阅读:
    多读者多写者的无锁队列
    PCI设备的地址空间
    交换机能不能连接不同的网段?
    VMware Workstation的三种网络连接模式
    Linux内存寻址和内存管理
    Fragment基础信息传递
    Android Studio获取SHA1和MD5方法
    AppCan学习笔记数据存储及listview简单应用
    Fragment基础生命周期
    Fragment基础创建
  • 原文地址:https://www.cnblogs.com/duanqibo/p/11841152.html
Copyright © 2011-2022 走看看