博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【算法和数据结构】_13_小算法_双链表
阅读量:6226 次
发布时间:2019-06-21

本文共 8820 字,大约阅读时间需要 29 分钟。

      没什么新的内容,把自己写的练习代码贴出来,供大家批判。

1 /*  2     本程序用来测试非线性存储结构:双链表  3 */  4   5   6 #include 
7 #include
8 9 10 //**************************************************0 11 // 定义双链表数据结构 12 struct dbllink 13 { 14 char data; 15 struct dbllink* preNode; 16 struct dbllink* postNode; 17 }; 18 19 typedef struct dbllink DBLLINK; 20 typedef DBLLINK* PDBLLINK; 21 //**************************************************1 22 23 24 25 //**************************************************0 26 // 定义BOOL数据类型 27 typedef enum {FALSE,TRUE} BOOL ; 28 //**************************************************1 29 30 31 32 //**************************************************0 33 // 定义申请存储空间宏 34 #define MALLOC(pNode,type,size) if(NULL==\ 35 (pNode=(type *)malloc(size*sizeof(type))))\ 36 {\ 37 return FALSE;\ 38 } 39 //**************************************************1 40 41 42 43 //**************************************************0 44 // 定义申请表头宏 45 #define MALLOCH(pNode,type,size) if(NULL==\ 46 (pNode=(type *)malloc(size*sizeof(type))))\ 47 {\ 48 return NULL;\ 49 }else\ 50 {\ 51 pNode->data='\0';\ 52 pNode->preNode=NULL;\ 53 pNode->postNode=NULL;\ 54 return pNode;\ 55 } 56 //**************************************************1 57 58 59 60 61 PDBLLINK CreateDblLink(void); 62 BOOL InitDblLink(PDBLLINK head,char element[]); 63 void EchoDblLink(PDBLLINK head); 64 PDBLLINK GetDblLinkEnd(PDBLLINK head); 65 PDBLLINK GetDblLinkEnd(PDBLLINK head); 66 BOOL AppendDblLink(PDBLLINK head,char element); 67 PDBLLINK SearchDblLink(PDBLLINK head,char element); 68 BOOL DenodeDblLink(PDBLLINK head,char element); 69 BOOL InsertDblLink(PDBLLINK head,char elePos,char element); 70 71 int main(int argc,char* argv[]) 72 { 73 PDBLLINK head; 74 75 head=CreateDblLink(); 76 if(head) 77 puts("Yes."); 78 79 if(InitDblLink(head,"hello world")) 80 EchoDblLink(head); 81 AppendDblLink(head,'A'); 82 EchoDblLink(head); 83 84 if(SearchDblLink(head,'A')) 85 puts("Yes"); 86 else 87 puts("No"); 88 89 if(DenodeDblLink(head,'l')) 90 EchoDblLink(head); 91 92 if(InsertDblLink(head,'l','l')) 93 EchoDblLink(head); 94 95 getchar(); 96 getchar(); 97 return 0; 98 } 99 100 101 102 103 //**************************************************0104 /*105 函数功能:106 创建双链表表头107 函数原型108 PDBLLINK CreateDblLink(void)109 函数参数:110 无111 返回值:112 创建成功返回表头指针,否则返回NULL113 异常114 无115 */116 PDBLLINK CreateDblLink(void)117 {118 PDBLLINK head;119 120 MALLOCH(head,DBLLINK,1);121 }122 //**************************************************1123 124 125 126 127 //**************************************************0128 /*129 函数功能:130 初始化双链表131 函数原型:132 BOOL InitDblLink(PDBLLINK head,char element[])133 函数参数:134 PDBLLINK head: 链表头指针135 char element[]:初始化字符串136 返回值:137 如果初始化成功,返回TRUE,否则返回FALSE138 异常:139 无140 */141 BOOL InitDblLink(PDBLLINK head,char element[])142 {143 PDBLLINK temp,144 end;145 int i;146 147 if(!head)148 {149 return FALSE;150 }151 152 end=head;153 for(i=0;element[i]!=0;i++)154 {155 MALLOC(temp,DBLLINK,1);156 157 temp->data='\0';158 temp->postNode =NULL;159 temp->preNode=end;160 161 end->data=element[i];162 end->postNode =temp;163 end=end->postNode ;164 }165 return TRUE;166 }167 168 //**************************************************1169 170 171 172 173 174 //**************************************************0175 /*176 函数功能:177 打印链表178 函数原型:179 void EchoDblLink(PDBLLINK head)180 函数参数:181 PDBLLINK head:链表头指针182 返回值:183 无184 异常:185 无186 */187 void EchoDblLink(PDBLLINK head)188 {189 PDBLLINK temp;190 191 if(temp=head)192 {193 while(temp->postNode)194 {195 printf("%c",temp->data );196 temp=temp->postNode ;197 }198 putchar('\n');199 return ;200 }201 else202 {203 return ;204 }205 }206 //**************************************************1207 208 209 210 211 //**************************************************0212 /*213 函数功能:214 获取最后的节点215 函数原型:216 PDBLLINK GetDblLinkEnd(PDBLLINK head)217 函数参数:218 PDBLLINK head:链表头指针219 返回值:220 如果获取成功,则返回链表尾节点指针,否则返回NULL221 异常:222 无223 */224 PDBLLINK GetDblLinkEnd(PDBLLINK head)225 {226 PDBLLINK temp;227 if(!head)228 {229 return NULL;230 }231 232 if(head->postNode)233 {234 temp=head;235 while(temp->postNode)236 {237 temp=temp->postNode;238 }239 return temp;240 }241 else242 {243 //仅有头指针244 return head;245 }246 }247 //**************************************************1248 249 250 251 252 253 //**************************************************0254 /*255 函数功能:256 在链表尾增加节点257 函数原型:258 BOOL AppendDblLink(PDBLLINK head,char element)259 函数参数:260 PDBLLINK head:链表头指针261 char element: 要插入的字符262 返回值:263 如果增加成功,返回TRUE;否则返回FALSE264 异常:265 无266 */267 BOOL AppendDblLink(PDBLLINK head,char element)268 {269 PDBLLINK end,270 NewNode;271 272 if(head)273 {274 end=GetDblLinkEnd(head);275 276 MALLOC(NewNode,DBLLINK,1);277 278 NewNode->data='\0';279 NewNode->postNode=NULL;280 NewNode->preNode =end;281 282 end->data=element;283 end->postNode=NewNode;284 285 return TRUE;286 }287 else288 {289 return FALSE;290 }291 }292 //**************************************************1293 294 295 296 297 298 //**************************************************0299 /*300 函数功能:301 查找指定元素302 函数原型:303 PDBLLINK SearchDblLink(PDBLLINK head,char element)304 函数参数:305 PDBLLINK head:链表头指针306 char element: 要查找的字符307 返回值:308 如果增加成功,返回元素所在的节点指针;否则返回NULL309 异常:310 无311 */312 PDBLLINK SearchDblLink(PDBLLINK head,char element)313 {314 PDBLLINK temp;315 316 if(!head)317 {318 return NULL;319 }320 else321 {322 temp=head;323 while(temp->postNode)324 {325 if(temp->data ==element)326 return temp;327 temp=temp->postNode ;328 }329 //如果遍历完毕,还没有返回,则查找失败330 return NULL;331 }332 }333 //**************************************************1334 335 336 337 338 //**************************************************0339 /*340 函数功能:341 删除指定字符所在的节点342 函数原型:343 BOOL DenodeDblLink(PDBLLINK head,char element)344 函数参数:345 PDBLLINK head:链表头指针346 char element: 指定的字符347 返回值:348 如果删除成功,返回TRUE,否则返回FALSE;349 异常:350 无351 */352 BOOL DenodeDblLink(PDBLLINK head,char element)353 {354 PDBLLINK temp,355 DeNode;356 357 if(NULL==head || head->postNode == NULL)358 {359 return FALSE;360 }361 362 temp=SearchDblLink(head,element);363 364 if(temp==head)365 {366 DeNode=head;367 head->postNode->preNode=NULL;368 head=head->postNode=NULL;369 370 DeNode->postNode=NULL;371 372 return TRUE;373 }374 else375 {376 temp->preNode->postNode =temp->postNode;377 temp->postNode->preNode=temp->preNode;378 free(temp);379 return TRUE;380 }381 }382 //**************************************************1383 384 385 386 387 388 //**************************************************0389 /*390 函数功能:391 增加节点392 1、如果指定的元素存在,则在指定元素之后增加393 2、如果指定的元素不存在,则在最后增加394 函数原型:395 BOOL InsertDblLink(PDBLLINK head,char element)396 函数参数:397 PDBLLINK head:链表头指针398 char elePos:指定的字符399 char element: 要插入的字符400 返回值:401 如果增加成功,返回TRUE,否则返回FALSE;402 异常:403 无404 */405 BOOL InsertDblLink(PDBLLINK head,char elePos,char element)406 {407 PDBLLINK temp,408 NewNode;409 410 if(NULL==head )411 {412 return FALSE;413 }414 415 //如果仅有头节点,则必须插入到头节点之后416 if(head->postNode == NULL)417 {418 MALLOC(NewNode,DBLLINK,1);419 420 NewNode->data='\0';421 NewNode->postNode=NULL;422 NewNode->preNode=head;423 424 head->data=element;425 head->postNode=NewNode;426 return TRUE;427 } 428 429 temp=SearchDblLink(head,element);430 MALLOC(NewNode,DBLLINK,1);431 432 NewNode->data =element;433 NewNode->postNode =temp->postNode;434 NewNode->preNode=temp;435 temp->postNode=NewNode;436 return TRUE;437 }438 //**************************************************1

 

转载于:https://www.cnblogs.com/volcanol/p/7047731.html

你可能感兴趣的文章
P4779 【模板】单源最短路径(标准版)
查看>>
二三维联动之MapControl与SceneControl的联动
查看>>
cocos2dx ScrollView 测试二 自定义Item和boundingBox
查看>>
洛谷P4175 网络管理
查看>>
js监听input输入字符变化
查看>>
tcpdump详解
查看>>
JAVA基础:ArrayList和LinkedList区别
查看>>
不仅仅完成功能,避免无效成本浪费
查看>>
[转载]SCSF 系列:Smart Client Software Factory 中 MVP 模式最佳实践
查看>>
什么是零宽断言
查看>>
复制延迟排查
查看>>
5.01 列出模式中的表
查看>>
Algs4-1.4DoublingRatio
查看>>
html介绍和head标签
查看>>
(转)C语言位运算详解
查看>>
[题解]Codeforces Round #519 - B. Lost Array
查看>>
Python 学习 —— 进阶篇(装饰器、类的特殊方法)
查看>>
Part 6.系统编程之线程--1(创建,全局变量访问,与进程对比)
查看>>
Unicode和UTF-8
查看>>
笔试算法题(48):简介 - A*搜索算法(A Star Search Algorithm)
查看>>