C语言实现
Creat函数,功能:给定头指针 建立一个双向链表
返回表头节点。
3条回答 默认 最新
fuill 2022-03-12 10:19关注
#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
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用