数据布局 双向链表的建设和读取详解及实例代码
发布时间:2020-12-31 21:45:48 所属栏目:创业 来源:网络整理
导读:数据布局 双向链表的建设和读取 双向链表是为了满意越发利便的查找前驱,而支付空间的价钱的一个数据布局。双向链表的节点界说如下: typedef struct node { int x; struct node *prior,*next; }DLNode; 双向链表的空间布局如下图所示: 双向链表的建设如下
数据布局 双向链表的建设和读取 双向链表是为了满意越发利便的查找前驱,而支付空间的价钱的一个数据布局。双向链表的节点界说如下: typedef struct node { int x; struct node *prior,*next; }DLNode; 双向链表的空间布局如下图所示: 双向链表的建设如下: //建设双向链表 DLNode *create_DList() { DLNode *p,*h,*l; int n,i,x; h = (DLNode *)malloc(sizeof(DLNode)); h->prior = h; //当空的双向链表就像上图那样前驱和后驱城市指向本身; h->next = h; p = h; printf("请输入必要建设双向链表的长度:"); scanf("%d",&n); for(i = 0; i < n; i++) { printf("请输入第%d个数",i+1); scanf("%d",&x); l = (DLNode *)malloc(sizeof(DLNode)); l->x = x; p->next = l; l->prior = p; l->next = h; //留意,l->next链接的是头节点, h->prior = l; //而头结点的前驱是l。 这样便组成了一个轮回的双向链表 p = l; } return(h); //不要健忘返回链表 } 上面绿颜色的字必要留意; 读取双向链表的代码如下: void out_DList(DLNode *l) { DLNode *p; int i; p = l; p = p->next; while(p!=l) //留意前提产生了变革 { printf("%5d",p->x); p = p->next; //不要健忘让p指向下一个节点; } } 留意:①:因为头节点的值为空,以是p = p->next; ②:轮回的前提产生了变革,由于这是一个轮回链表,链表的尾部指向头部,以是前提是p!=l; 所有代码如下: #include<stdio.h> #include <stdlib.h> typedef struct node { int x; struct node *prior,*next; }DLNode; //函数声明 DLNode *create_DList(); void out_DList(DLNode *l); main() { DLNode *l; l = create_DList(); printf("建设乐成!"); out_DList(l); } //读取双向链表 void out_DList(DLNode *l) { DLNode *p; int i; p = l; p = p->next; while(p!=l) { printf("%5d",p->x); p = p->next; } } //建设双向链表 DLNode *create_DList() { DLNode *p,x; h = (DLNode *)malloc(sizeof(DLNode)); h->prior = h; h->next = h; p = h; printf("请输入必要建设双向链表的长度:"); scanf("%d",&x); l = (DLNode *)malloc(sizeof(DLNode)); l->x = x; p->next = l; l->prior = p; l->next = h; h->prior = l; p = l; } return(h); } 感激阅读,但愿能辅佐到各人,感谢各人对本站的支持! (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |