《C语言双链表介绍包含源代码》由会员分享,可在线阅读,更多相关《C语言双链表介绍包含源代码(7页珍藏版)》请在人人文库网上搜索。
1、双链表的操作示例什么是双链表?双链表是在操作系统中常用的数据结构,它的每个数据结点中都有两个指 针,分别指向直接后继和直接前驱,其结点组成如下:)(next)其示意图举例如下:1、双链表结点定义:/*数据元素类型*/typ edefint Type;/*双链表结点结构体*/typ edef struct _DListNode -/*数据*/struct _DListNode * prior; /* 指向直接前趋结点 */ struct _DListNode * next; /* 指向直接后继结点 */Type data;DListNode; |2、相关操作示例/*函数声明*/static DL。
2、istNode * dlist_create(void);static int dlist_find (DListNode *dlist, Type find_data);static DListNode * dlist_change(DListNode *dlist, int pos. Type new_data); static DListNode * dlist_insert (DListNode *dlist, Type insert_data, int pos); static DListNode * dlist_delete(DListNode *dlist, Type del_d。
3、ata);static void dlist_print_int (DListNode *dlist);(1)创建一个双链表:(5, 2,0, 13,14) 示意图:1static DListNode * dlist_create(void) /*创建第一个结点*/DListNode *node = (DListNode*) malloc (sizeof(DListNode); node-prior = NULL ;|node-next = NULL ;node-data = |list0;/*创建头指针并指向第一个结点*/DListNode *head = node;/*创建其它结点并链接成。
4、双链表*/for (int i = 1; i next = |nuLL |;new_node-prior = head;/*关键点1:新结点的prior指针指向前驱结点*/new_node-data = listi; IDListNode *new_node = (pListNode*) _malloc (sizeof(DListNode);/*改变前驱结点的next指针指向*/head-next = new_node;/*关键点2 :前驱结点的next指针指向新结点*/*头指针后移*/ head = head-next;return node;(2)元素查找:static int dlist。
5、_find (DListNode *dlist, Type find_data) I DListNode* te mp = dlist;inti pos = illwhile (te mp) Lif I (find_data = temp-data)return | pos;_else7.temp = temp- next;)os+;return ERROR; (3)元素替换:static DListNode * dlist_change(DListNode *dlist, int pos, Type new_data) IDListNode* te mp = dlist;for I (int。
6、 i = |l; i next;temp-data = new_data;return dlist;(4) 结点插入:头部插入:(II 11中间插入:M nullI .1 jil n尾部插入:一-JtJI I厂_倍1自:、raji 1static DListNode * dlist_insert (DListNode *dlist, Type insert_data, int pos)J *创建新结点待插入*/DListNode *new_node = (DListNode*) malloc(sizeof(DListNode); new_node-next = |nuLL ;new_node-。
7、p rior =NULL; |new_node-data = insert_data)if (pos LEN + 1)printf(插入的位置错误 |!n);/*头部插入*/if (1 = p os)dlist-p rior = new_node;/*步骤1 */new_node-next = dlist;/*/*dlist = new_node;tiseDListNode *te mp = dlist;for (lintI i = |l; i next;/*中间插入*/if I (temp-next != NULL )/*步骤1 */new_node-p rior = temp; temp-。
8、 next- p rior = new_node;/*/*步骤2 */步骤3 */new_node-next = temp- next;步骤4 */*temp- next = new_node;_/*尾部插入*/else1temp- next = new_node;/* 步骤 1 */new_node-prior = temp; /* 步骤 2 */|return dlist;(5)结点删除:static DListNode * dlist_delete(DListNode *dlist, Type del_data) DListNode *te mp = dlist;while (te mp。
9、)if (del_data = temp-data)-temp- next- p rior = temp-p rior; temp-p rior-next = temp- next; free(te mp);return dlist;temp = temp- next;return dlist; 3、验证主函数:int main(void)printf (创建一个双链表:); DListNode *dlist = dlist_create(); dlist_ print_int(dlist);printf(元素13所在的位置是:); int pos = dlist_find(dlist, 13。
10、);if (ERROR = p os)p rintf(该元素不存在。n);elseprintf (%dn, pos);printf(把第1个位置的元素替换为2020得到新的双链表为:);dlist = dlist_change(dlist, 1,2020);dlist_ print_int(dlist);printf(第2个位置插入888得到新的双链表为:); dlist = dlist_inseil(dlist, 888, 2); dlist_ print_int(dlist);printf(删除元素2得到新的双链表为:); dlist = dlist_delete(dlist, 2);dlist_ print_int(dlist);return 0;运行结果:(31匚.,Wi n doiwsSystem 5 2cfnd. e*#90dagcc dll?t ,c - dlistvxrP: MlyCnHe d 1 iat _exe 创趣一个取甜表活2 0 13 K冗緊丄场柱的位s是注k电第丄个位置的元翕替换为2畝勒瞬到新的取IS表詡汐血0 2 0 13 14傷書3#到新的取糙裏为柑聊0 BBS 2 0 13 U刪除元素2焊到新的戏锥表为:2020 688 0 13 H倒 ZyCode。