zoukankan      html  css  js  c++  java
  • volcanol的工控博客

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

      1 /*
      2     本程序用来测试非线性存储结构:双链表
      3 */
      4 
      5 
      6 #include <stdio.h>
      7 #include <stdlib.h>
      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='';
     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 //**************************************************0
    104 /*
    105 函数功能:
    106     创建双链表表头
    107 函数原型
    108     PDBLLINK CreateDblLink(void)
    109 函数参数:
    110 111 返回值:
    112     创建成功返回表头指针,否则返回NULL
    113 异常
    114 115 */
    116 PDBLLINK CreateDblLink(void)
    117 {
    118     PDBLLINK head;
    119 
    120     MALLOCH(head,DBLLINK,1);
    121 }
    122 //**************************************************1
    123 
    124 
    125 
    126 
    127 //**************************************************0
    128 /*
    129 函数功能:
    130     初始化双链表
    131 函数原型:
    132     BOOL InitDblLink(PDBLLINK head,char element[])
    133 函数参数:
    134     PDBLLINK head: 链表头指针
    135     char element[]:初始化字符串
    136 返回值:
    137     如果初始化成功,返回TRUE,否则返回FALSE
    138 异常:
    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='';
    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 //**************************************************1
    169 
    170 
    171 
    172 
    173 
    174 //**************************************************0
    175 /*
    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('
    ');
    199         return ;
    200     }
    201     else
    202     {
    203         return ;
    204     }
    205 }
    206 //**************************************************1
    207 
    208 
    209 
    210 
    211 //**************************************************0
    212 /*
    213 函数功能:
    214     获取最后的节点
    215 函数原型:
    216     PDBLLINK GetDblLinkEnd(PDBLLINK head)
    217 函数参数:
    218     PDBLLINK head:链表头指针
    219 返回值:
    220     如果获取成功,则返回链表尾节点指针,否则返回NULL
    221 异常:
    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     else
    242     {
    243         //仅有头指针
    244         return head;
    245     }
    246 }
    247 //**************************************************1
    248 
    249 
    250 
    251 
    252 
    253 //**************************************************0
    254 /*
    255 函数功能:
    256     在链表尾增加节点
    257 函数原型:
    258     BOOL AppendDblLink(PDBLLINK head,char element)
    259 函数参数:
    260     PDBLLINK head:链表头指针
    261     char element: 要插入的字符
    262 返回值:
    263     如果增加成功,返回TRUE;否则返回FALSE
    264 异常:
    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='';
    279         NewNode->postNode=NULL;
    280         NewNode->preNode =end;
    281 
    282         end->data=element;
    283         end->postNode=NewNode;
    284 
    285         return TRUE;
    286     }
    287     else
    288     {
    289         return FALSE;
    290     }
    291 }
    292 //**************************************************1
    293 
    294 
    295 
    296 
    297 
    298 //**************************************************0
    299 /*
    300 函数功能:
    301     查找指定元素
    302 函数原型:
    303     PDBLLINK SearchDblLink(PDBLLINK head,char element)
    304 函数参数:
    305     PDBLLINK head:链表头指针
    306     char element: 要查找的字符
    307 返回值:
    308     如果增加成功,返回元素所在的节点指针;否则返回NULL
    309 异常:
    310 311 */
    312 PDBLLINK SearchDblLink(PDBLLINK head,char element)
    313 {
    314     PDBLLINK temp;
    315 
    316     if(!head)
    317     {
    318         return NULL;
    319     }
    320     else
    321     {
    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 //**************************************************1
    334 
    335 
    336 
    337 
    338 //**************************************************0
    339 /*
    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     else
    375     {
    376         temp->preNode->postNode =temp->postNode;
    377         temp->postNode->preNode=temp->preNode;
    378         free(temp);
    379         return TRUE;
    380     }
    381 }
    382 //**************************************************1
    383 
    384 
    385 
    386 
    387 
    388 //**************************************************0
    389 /*
    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='';
    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
  • 相关阅读:
    Delphi中多线程同步过程Synchronize的一些说明
    property中的read,write是什么意思?
    如何用delphi读写csv文件
    将DBGrid中的数据导入Excel表格中
    如何获取combobox显示的值
    WaitForSingleObject 的返回值
    关于GetOverlappedResult函数的一些知识
    串口编程:COMSTAT 结构
    windows 官方镜像下载地址
    ffmpeg 命令行改变视频分辨率
  • 原文地址:https://www.cnblogs.com/volcanol/p/7047731.html
Copyright © 2011-2022 走看看