zoukankan      html  css  js  c++  java
  • 数据结构 链表

     具有基本的增删改查功能的链表

    打了一中午 可算完事了……

      1 #include<stdio.h>
      2 #include<string.h>
      3 /**********************************************
      4  仅仅是完成了基本的增删改查还有普通的查询工作
      5  有些地方还不具有健壮性 会慢慢修改
      6  最后有代码的样例输入用来调试程序
      7 ***********************************************/
      8 struct _list{ //链表
      9     int value;
     10     _list *next;
     11     _list(){ //初始化
     12         value=0;
     13         next=NULL;
     14     }
     15 };
     16 
     17 int _size(_list *&node){ //计算链表长度
     18     if(node->next==NULL) return 0;
     19     _list *used=node->next;
     20     int sum=1;
     21     while(true){
     22         if(used->next==NULL) break;
     23         else{
     24             sum++;
     25             used=used->next;
     26         }
     27     }
     28     return sum;
     29 }
     30 
     31 void add(_list *&node,int value){ //向链表末尾添加值为value的节点
     32     if(node==NULL){
     33         node=new _list();
     34         node->value=value;
     35         node->next=NULL;
     36     }
     37     else add(node->next,value);
     38 }
     39 
     40 _list *_find(_list *&node,int local){ //寻找local位置的节点
     41     _list *used=node->next;
     42     int l=1;
     43     while(l<local){
     44         used=used->next;
     45         l++;
     46     }
     47     return used;
     48 }
     49 
     50 int find_value(_list *&node,int value){ //寻找值为value的节点的位置 如果没有返回-1
     51     _list *used=node;
     52     int l=0,ans=-1;
     53     int __size=_size(node);
     54     while(l<=__size){
     55         if(used->value==value){
     56             ans=l;
     57             break;
     58         }
     59         used=used->next;
     60         l++;
     61     }
     62     return ans;
     63 }
     64 
     65 void _insert(_list *&node,int local,int value){ //向local位置插入一个值为value的节点
     66     _list *used=_find(node,local-1);
     67     _list *now=used->next;
     68     _list *__list=new _list();
     69     __list->next=now;
     70     __list->value=value;
     71     used->next=__list;
     72 }
     73 
     74 void change(_list *&node,int local,int value){ //将local位置的节点的值赋为value
     75     _list *used=_find(node,local);
     76     used->value=value;
     77 }
     78 
     79 void _delete(_list *&node,int local){ //删除local位置的节点
     80     _list *_front=_find(node,local-1);
     81     _list *now=_find(node,local);
     82     _front->next=now->next;
     83     delete(now);
     84 }
     85 
     86 void print(_list *&node){ //打印整个链表
     87     if(node->next==NULL){
     88         printf("default
    ");
     89         return ;
     90     }
     91     _list *used=node->next;
     92     printf("%d",used->value);
     93     used=used->next;
     94     while(used!=NULL){
     95         printf(" %d",used->value);
     96         used=used->next;
     97     }
     98     printf("
    ");
     99     return ;
    100 }
    101 
    102 void destroy(_list *&node){ //销毁整个链表
    103     _list *used=node->next;
    104     node->next=NULL;
    105     if(used==NULL)
    106         printf("default
    ");
    107     else{
    108         int __size=_size(node);
    109         for(int i=1;i<=__size;i++)
    110             _delete(node,i);
    111     }
    112 }
    113 
    114 int _empty(_list *&node){ //询问链表是否为空
    115     if(node->next==NULL) return 1;
    116     else return 0;
    117 }
    118 
    119 void _clear(_list *&node){ //清空整个链表
    120     _list *used=node->next;
    121     node->value=-1;
    122     while(used!=NULL){
    123         used->value=-1;
    124         used=used->next;
    125     }
    126 }
    127 
    128 int main(){
    129     char act[20];
    130     int local,value;
    131     _list *node=new _list();
    132     while(scanf("%s",act)!=EOF){
    133         if(strcmp(act,"end")==0) break;
    134         if(strcmp(act,"print")==0) print(node);
    135         if(strcmp(act,"clear")==0) _clear(node);
    136         if(strcmp(act,"destory")==0) destroy(node);
    137         if(strcmp(act,"add")==0){
    138             scanf("%d",&value);
    139             add(node,value);
    140         }
    141         if(strcmp(act,"delete")==0){
    142             scanf("%d",&local);
    143             _delete(node,local);
    144         }
    145         if(strcmp(act,"size")==0){
    146             printf("%d
    ",_size(node));
    147         }
    148         if(strcmp(act,"insert")==0){
    149             scanf("%d%d",&local,&value);
    150             _insert(node,local,value);
    151         }
    152         if(strcmp(act,"change")==0){
    153             scanf("%d%d",&local,&value);
    154             change(node,local,value);
    155         }
    156         if(strcmp(act,"find")==0){
    157             scanf("%d",&local);
    158             if(local>_size(node)) printf("default
    ");
    159             else printf("%d
    ",_find(node,local)->value);
    160         }
    161         if(strcmp(act,"find_value")==0){
    162             scanf("%d",&value);
    163             int val=find_value(node,value);
    164             if(val==-1) printf("none
    ");
    165             else printf("%d
    ",val);
    166         }
    167 
    168         if(strcmp(act,"empty")==0){
    169             if(_empty(node)) printf("empty
    ");
    170             else printf("not empty
    ");
    171         }
    172     }
    173     return 0;
    174 }
    175 /*
    176 
    177 add 1
    178 add 2
    179 add 3
    180 add 4
    181 empty
    182 print
    183 delete 2
    184 print
    185 insert 3 100
    186 print
    187 empty
    188 find_value 3
    189 find 3
    190 
    191 */
  • 相关阅读:
    浅谈Android中Activity的生命周期
    探索ASP.NET MVC框架之控制器的查找与激活机制
    探索ASP.NET MVC框架之路由系统
    浅谈JavaScript中的defer,async
    浅谈MVC中路由
    JavaScript中一些怪异用法的理解
    split
    您正在搜索的页面可能已经删除、更名或暂时不可用。
    C#中的Attributes的用法
    Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
  • 原文地址:https://www.cnblogs.com/general10/p/5945364.html
Copyright © 2011-2022 走看看