LLLLLogic 2022-03-12 09:55 采纳率: 60%
浏览 55
已结题

给定一个头指针,如何创建一个双向链表?

C语言实现
Creat函数,功能:给定头指针 建立一个双向链表
返回表头节点。

  • 写回答

3条回答 默认 最新

  • fuill 2022-03-12 10:19
    关注

    img

    #include<stdio.h>
    #define ElemType int
    
    typedef struct Node
    {
        ElemType data;      //数据域
        struct Node *prio;  //前驱结点指针域
        struct Node *next;  //后继结点指针域
    } Node, *PNode;
    
    //双链表管理结构
    typedef struct List
    {
        PNode first; //指向头结点
        PNode last; //指向尾结点
        int   size; //保存有效结点个数
    } List;
    //初始化双链表
    void InitDList(List *list)
    {
        //申请头结点
        Node *s = (Node *)malloc(sizeof(Node));
        //assert(s != NULL);
        //初始化时管理结点头指针和尾指针都指向头结点
        list->first = list->last = s;
        //头结点的前驱指针域和后继指针域都先赋值为空
        list->last->next = NULL;
        list->first->prio = NULL;
        //此时还没有有效结点
        list->size = 0;
    }
    //头插
    //获取结点
    Node* _buynode(ElemType x)
    {
        //申请结点空间
        Node *s = (Node *)malloc(sizeof(Node));
        //assert(s != NULL);
        //为结点添加数据
        s->data = x;
        s->next = s->prio = NULL;
        return s;
    }
    
    //尾部插入
    void push_back(List *list, ElemType x)
    {
        //获取要插入的有效结点
        Node *s = _buynode(x);
        //该结点与前驱结点建立连接
        s->prio = list->last;
        //前驱结点与该结点建立连接
        list->last->next = s;
        //更新管理结点中尾指针域的指向
        list->last = s;
        //更新有效结点数
        list->size++;
    }
    
    //查看双链表内的所以数据
    void show_list(List *list)
    {
        //指向第一个有效结点
        Node *p = list->first->next;
        while(p != NULL)//将每个有效结点内的数据输出
        {
            printf("%d-->",p->data);
            p = p->next;
        }
        printf("Nul.\n");
    }
    void creat(List list)
    {
        printf("输入节点个数:");
        int n,data;
        scanf("%d",&n);
        for(int j=0; j<n; j++)
        {
            scanf("%d",&data);
            ElemType tem=data;
            push_back(&list,tem);
        }
        show_list(&list);
    }
    int main()
    {
        List list;
        InitDList(&list);
        creat(list);
        return 0;
    }
    

    主要代码:https://blog.csdn.net/qq_44075108/article/details/109125866

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 创建了问题 3月12日

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持