zoukankan      html  css  js  c++  java
  • 双向链表操作-简单

    源程序:

    #include <stdio.h>

    #include <stdlib.h>

    //双向链表结点的定义

    typedef struct dbnode

    {

      int data;

      struct dbnode *prio, *next;

    }DbNode, linkdblist;

     //创建双向链表

     DbNode *creatlist(void)

     {

      linkdblist *p, *q, *head;

      q = p = (linkdblist *)malloc(sizeof(linkdblist));

      p->next = NULL;

      head = q;

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

      scanf("%d", &p->data);

      while (p->data != -1)

      {

        q->next = p;

        p->prio = q;

        q = p;

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

        scanf("%d", &p->data);

      }

      q->next = NULL;

       return head;

    }

    //输出双向链表

     void print(linkdblist *head)

    {

      linkdblist *p;

       p = head->next;

      if (p == NULL) 

      printf("空链表! ");

      while (p != NULL) 

      {

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

        p = p->next;

      }

    //向双向链表中的第i个位置插入一个结点x

     void insertdblist(linkdblist *head, int x, int i)

    {

      linkdblist *p, *q = head;

      if (i == 1) 

        q = head;

      else

      {

        q = q->next;

         int c = 1;   

        while ((c<i - 1) && (q != NULL))

        {

           q = q->next;

           c++;

         }

      }

      if (q != NULL && q->next != NULL) 

      {

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

        p->data = x;

        p->prio = q;

         p->next = q->next;

        q->next = p;

        q->next->prio = p;

      }

      else

        printf("找不到插入的位置!");

    }

    //删除双向链表中指定位置上的一个结点

    void deletelinkdblist(linkdblist *head, int i)

    {

      linkdblist *p, *q = head;

      if (i == 1)

        q = head;

      else

      {

        q = q->next;

        int c = 1; 

        while (c < i - 1 && q != NULL) 

        { 

          q = q->next;

          c++ ;

        }

      }

      if (q != NULL && q->next != NULL)

      {

        p = q->next;

        p->prio = q;

        p->prio->next = p->next;

        p->next->prio = p->prio; 

        free(p);

      }

      else if (q->next == NULL)

      { 

        p = q;

         p->prio->next = NULL;

        free(p);

      }

      else

        printf("没有找到待删除的结点");

    }

    //双向链表的主函数

    void main()

      linkdblist *head; 

      head = creatlist(); 

      print(head);

      printf(" ====向双向链表的某位置插入一个值==== ");

      int num, i;

      printf("输入插入的位置:");

      scanf("%d", &i);

      printf(" 输入插入的值:"); 

      scanf("%d", &num); 

      insertdblist(head, num, i);

      print(head); 

      printf(" ");

      printf(" ====删除双向链表的某位置上的一个值==== "); 

      int j;

       printf("输入删除的位置:");

      scanf("%d", &j);

       deletelinkdblist(head, j);

      print(head); 

      system("pause");

      printf(" ");

    }

  • 相关阅读:
    Java Swing 空布局
    Java Swing 盒布局管理器
    遇到的JDBC的一些简单错误
    JVM内存调整
    jeesite中重启项目时用户头像丢失的疑惑
    Java服务突然失败:A fatal error has been detected by the Java Runtime Environment的总结
    从官网下载历史版本的java
    容器未来会怎么发展?容器安全怎么样?容器使用效果如何?
    What's The Next|Kube-OVN 社区线上 Meetup 预告!
    灵雀云发布云原生制品仓库Harbor企业版(Alauda Registry Service for Harbor)
  • 原文地址:https://www.cnblogs.com/duanqibo/p/11841263.html
Copyright © 2011-2022 走看看