数据结构之双链表

本文介绍了一个使用C++实现的双向链表的基本操作,包括创建、排序和打印。通过尾插法构建链表,并采用冒泡排序进行升序排列。文章提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天的插入貌似应该有&不过我给的参数是头结点的又没有关系.纠结一下.明天看看

创建.排序和打印之.空指针问题也没有改.

Code:
  1. #include"stdafx.h"  
  2. #include<stdlib.h>  
  3. #include "stdio.h"  
  4. #include <iostream>  
  5.   
  6. using namespace std;  
  7. typedef int Type;  
  8. typedef struct DuLNode{  
  9. Type data;  
  10. struct DuLNode *lLink,*rLink;  
  11. }DuLNode,*DuLinkList ;  
  12. DuLinkList * DulList;//头结点  
  13.   
  14. //尾插法建立  
  15. DuLinkList CreatLinkList()  
  16. {  
  17. DuLinkList L=new DuLNode;  
  18. L->lLink=L->rLink=0;//空表  
  19. L->data=100;//测试代码  
  20. DuLNode *Node,*rear=L;  
  21. Type value;//数据类型  
  22. cin>>value;  
  23. while(value!=-1)//-1是结束标志  
  24.     {  
  25.     Node=new DuLNode;//??这里是否会失败?空指针?  
  26.     if(0==Node) break;//??  
  27.     Node->data=value;  
  28.     Node->lLink=rear;  
  29.     rear->rLink=Node;//L?  
  30.     rear=Node;//r指向新的尾结点  
  31.     cin>>value;  
  32.     }  
  33. rear->rLink=L;  
  34. L->lLink=rear;  
  35. return L;  
  36. }  
  37.   
  38. //排序单调不减  
  39. void sortDuLNode(DuLinkList& L){  
  40.     //头结点没数据  
  41.     DuLinkList M=L->rLink;//标记测试 首元结点  
  42.     DuLinkList rear=L->lLink;  
  43.     DuLinkList j=M;  
  44.     //起泡排序  
  45.     while(rear!=L){  
  46.         while(j!=rear){  
  47.             if( (j->data)>(j->rLink->data) ) swap(j->data,j->rLink->data);  
  48.                 j=j->rLink;  
  49.         }  
  50.         j=M;  
  51.         rear=rear->lLink;  
  52.     }  
  53.   
  54.   
  55.   
  56. }  
  57.   
  58. void swap(Type& i,Type& j){  
  59. Type temp;  
  60. temp=i;  
  61. i=j;  
  62. j=temp;  
  63. }  
  64.   
  65. void printDuLNode(DuLinkList L){  
  66.     //头结点没数据  
  67. DuLinkList M=L->lLink;//尾结点  
  68. L=L->rLink;//第一个数据结点  
  69. while(M!=L)  
  70.     {  
  71.     cout<<L->data<<endl;  
  72.     L=L->rLink;  
  73.     }  
  74.     cout<<L->data<<endl;//打印尾结点  
  75. }  
  76.   
  77. int main(){  
  78. DuLinkList M;  
  79. //声明函数  
  80. DuLinkList CreatLinkList();  
  81. void swap(Type &i,Type&j);  
  82. void sortDuLNode(DuLinkList& L);  
  83. void printDuLNode(DuLinkList L);  
  84. //  
  85. M=CreatLinkList();  
  86. //swap(M->rLink->data,M->rLink->rLink->data);  
  87. //printDuLNode(M);//测试代码  
  88.   
  89. sortDuLNode(M);  
  90. printDuLNode(M);  
  91.   
  92. system("PAUSE");  
  93. return 0;  
  94. }  
  95.   
  96. ///  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值