欢迎来到天天文库
浏览记录
ID:14059605
大小:54.00 KB
页数:4页
时间:2018-07-25
《一步一步写算法(之双向链表)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一步一步写算法(之双向链表)【声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing@163.com】 前面的博客我们介绍了单向链表。那么我们今天介绍的双向链表,顾名思义,就是数据本身具备了左边和右边的双向指针。双向链表相比较单向链表,主要有下面几个特点: (1)在数据结构中具有双向指针 (2)插入数据的时候需要考虑前后的方向的操作 (3)同样,删除数据的是有也需要考虑前后方向的操作 那么,一个非循环的双向链表操作应该是怎么样的呢?我们可以自己尝试一下: (1)定义双向链表的基本
2、结构1.typedef struct _DOUBLE_LINK_NODE2.{3. int data;4. struct _DOUBLE_LINK_NODE* prev;5. struct _DOUBLE_LINK_NODE* next;6.}DOUBLE_LINK_NODE; (2)创建双向链表节点1.DOUBLE_LINK_NODE* create_double_link_node(int value)2.{ 3. DOUBLE_LINK_NODE* pDLinkNode = NULL;4.
3、 pDLinkNode = (DOUBLE_LINK_NODE*)malloc(sizeof(DOUBLE_LINK_NODE));5. assert(NULL != pDLinkNode);6. 7. memset(pDLinkNode, 0, sizeof(DOUBLE_LINK_NODE));8. pDLinkNode->data = value;9. return pDLinkNode;10.} (3)删除双向链表1.void delete_all_double_link_node(D
4、OUBLE_LINK_NODE** pDLinkNode)2.{3. DOUBLE_LINK_NODE* pNode;4. if(NULL == *pDLinkNode)5. return ;6. 7. pNode = *pDLinkNode;8. *pDLinkNode = pNode->next;9. free(pNode);10. delete_all_double_link_node(pDLinkNode);11.} (4)在双向链表中查找数据1.DOUBLE_L
5、INK_NODE* find_data_in_double_link(const DOUBLE_LINK_NODE* pDLinkNode, int data)2.{ 3. DOUBLE_LINK_NODE* pNode = NULL;4. if(NULL == pDLinkNode)5. return NULL;6. 7. pNode = (DOUBLE_LINK_NODE*)pDLinkNode;8. while(NULL != pNode){9. if(data ==
6、 pNode->data)10. return pNode;11. pNode = pNode ->next;12. }13. 14. return NULL;15.} (5)双向链表中插入数据1.STATUS insert_data_into_double_link(DOUBLE_LINK_NODE** ppDLinkNode, int data)2.{3. DOUBLE_LINK_NODE* pNode;4. DOUBLE_LINK_NODE*
7、pIndex;5. 6. if(NULL == ppDLinkNode)7. return FALSE;8. 9. if(NULL == *ppDLinkNode){10. pNode = create_double_link_node(data);11. assert(NULL != pNode);12. *ppDLinkNode = pNode;13. (*ppDLinkNode)->prev = (*ppDLinkNode)->next
8、 = NULL;14. return TRUE;15. } 16. 17. if(NULL != find_data_in_double_link(*ppDLinkNode, data))18. return FALSE;19.
此文档下载收益归作者所有