双向链表结点的插入
来源:互联网 发布:生存分析数据库 编辑:程序博客网 时间:2024/05/17 06:49
// * ======================================== */// * 程式实例: 4_3_2.c */// * 双向链结串列内节点插入 */// * ======================================== */#include <stdlib.h>struct dlist // * 双向串列结构宣告 */{ int data; // * 节点资料 */ struct dlist *front; // * 指向下一节点的指标 */ struct dlist *back; // * 指向前一节点的指标 */};typedef struct dlist dnode; // * 双向串列新型态 */typedef dnode *dlink; // * 双向串列指标新型态 */// * ---------------------------------------- */// * 双向链结串列的列印 */// * ---------------------------------------- */void printdlist(dlink head){ while ( head != NULL ) // * 串列走访回路 */ { printf("[%d]",head->data); // * 列印节点资料 */ head = head->front; // * 指向下一个节点 */ } printf("\n"); // * 换行 */}// * ---------------------------------------- */// * 双向链结串列的节点插入 */// * ---------------------------------------- */dlink insertnode(dlink head,dlink ptr,int value){ dlink new_node; // * 新节点的指标 */ // * 建立新节点,配置节点记忆体 */ new_node = ( dlink ) malloc(sizeof(dnode)); if ( !new_node ) // * 检查记忆体指标 */ return NULL; new_node->data = value; // * 建立节点内容 */ new_node->front = NULL; // * 设定指标初值 */ new_node->back = NULL; // * 设定指标初值 */ if ( head == NULL ) // * 如果串列是空的 */ return new_node; // * 传回新节点指标 */ if ( ptr == NULL ) { // * 第一种情况: 插在第一个节点之前, 成为串列开始 */ new_node->front = head; // * 新节点指向串列开始 */ head->back = new_node; // * 原节点指向新节点 */ head = new_node; // * 新节点成为串列开始 */ } else { if ( ptr->front == NULL ) // * 是否有下一个节点 */ { // * 第二种情况: 插在串列的最後 */ ptr->front = new_node; // * 最後节点指向新节点 */ new_node->back = ptr; // * 新节点指回最後节点 */ } else { // * 第三种情况: 插入节点至串列中间节点内 */ ptr->front->back = new_node; // *下一节点指回新节点*/ new_node->front = ptr->front;// *新节点指向下一节点*/ new_node->back = ptr; // * 新节点指回插入节点 */ ptr->front = new_node; // * 插入节点指向新节点 */ } } return head; // * 传回串列起始指标 */}// * ---------------------------------------- */// * 主程式: */// * 使用插入节点的方式来建立串列, 完成後将 */// * 串列内容印出. */// * ---------------------------------------- */void main(){ dlink head = NULL; // * 环状链结串列指标 */ dlink tail = NULL; // * 串列最後的指标 */ int list[6] = { 1, 2, 3, 4, 5, 6 }; // * 阵列内容 */ int i; head = insertnode(head,head,list[0]); // *建立第一个节点*/ printdlist(head); // * 印出串列 */ tail = head; // * 保留串列最後指标 */ // * 第一种情况: 插在第一个节点之前 */ head = insertnode(head,NULL,list[1]); printdlist(head); // * 印出串列 */ // * 第二种情况: 插在串列的最後 */ head = insertnode(head,tail,list[2]); printdlist(head); // * 印出串列 */ for ( i = 3; i < 6; i++ ) // * 建立串列节点 */ { // * 第三种情况: 插入节点至串列中间节点内 */ head = insertnode(head,head,list[i]); printdlist(head); // * 印出串列 */ }}
- 双向链表结点的插入
- 双向链表插入结点的理解。
- 插入结点(双向链表)
- C语言实现双向非循环链表(带头结点尾结点)的节点插入
- 双向链表插入结点分析和总结
- java建立双向链表,插入结点,删除节点
- 双向链表的创建、结点的插入、删除与打印
- C语言实现双向非循环链表(不带头结点)的节点插入
- 用独立头结点的双向链表:用于数据按顺序插入
- 链表结点的插入
- 双向+头结点+循环的链表
- 带头结点的双向循环链表
- 带头结点的双向循环链表
- 带有头结点的双向链表
- 带头结点的双向循环链表
- C语言实现链表之双向链表(五)头结点前插入结点
- C语言实现链表之双向链表(七)尾结点后插入结点
- Java双向链表的创建结点,清空链表,添加结点,删除结点
- MFC连接数据库第一次小尝试
- CC2430 串口使用详解
- 文件IO 操作类库,通用成熟的代码,现分享出来,为程序员提供最优秀的源代码
- Hibernate使用Criteria实现查询
- 利用VC++实现局域网实时视频传输(网络视频)
- 双向链表结点的插入
- STL易错知识点
- JS_DOM
- java new IO
- Asp封装类的常用函数
- 移动 SVN 仓库,处理 expected fs format between
- oracle10g-对表空间的理解与应用
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- datagrideview下拉列表显示数据