单链表的增删查改

 1 /*
 2 寻常的函数实现
 3 并非类定义
 4 */
 5 
 6 #include<iostream>
 7 #include<bits/stdc++.h>
 8 using namespace std;
 9 struct Node{
10     int value;
11     Node * next;
12 };
13 void build_link(Node * a,int n){ //建表
14     Node *p;
15     p=a;
16     for(int i=0;i<n;i++){
17         Node *q=(Node *)malloc(sizeof(Node)); //给下一节点开辟空间
18         cin>>q->value; //按顺序输入每个节点的值value
19         q->next=NULL;
20         p->next=q;
21         p=q;
22     }
23 }
24 bool Add(Node *a,int add_value){  //增加值为add_value的元素
25     Node *tmp=(Node *)malloc(sizeof(Node));
26     if(tmp==NULL) return false;  //如果开辟空间不成功返回false
27     tmp->value=add_value;
28     tmp->next=a->next;
29     a->next=tmp;
30     return true; //增加元素成功
31 }
32 bool Clear(Node *a,int clear_value){
33     while(a->next!=NULL){
34         if(clear_value==(a->next->value)){
35             a->next=a->next->next;
36             return true;  //清除值为clear_value的结点
37         }
38         a=a->next;
39     }
40     return false;//说明无法找到值为clear_value的结点,返回false
41 }
42 Node * Find(Node *a,int q_value){
43     while(a->next!=NULL){
44         if(q_value==(a->next->value)){
45             return a->next;  //返回值为q_value的结点的地址
46         }
47         a=a->next;
48     }
49     return NULL; //无法找到值为q_value的结点,返回false
50 }
51 bool change(Node *a,int now_value,int change_value){
52     while(a->next!=NULL){
53         if(now_value==(a->next->value)){
54             a->next->value=change_value;
55             return true; //说明已经将值为now_value的结点的值改为chang_value
56         }
57         a=a->next;
58     }
59     return false; //无法找到值为now_value的结点,返回false
60 }
61 int main(){
62     Node *a=new Node; //创建头指针
63     int n;
64     cin>>n; //输入链表的长度n
65     a->next=NULL;
66     build_link(a,n);
67     Node *pmax=Find(a,3); //测试查找操作
68     if(Add(a,6)){ //测试增加操作
69         cout<<'a'<<' '<<a->next->value<<endl;
70     }else{
71         cout<<"a  false"<<endl;
72     }
73     if(Clear(a,4)){ //测试删除操作
74         Node *tmp=a;
75         while(tmp->next!=NULL){
76             cout<<tmp->next->value<<' ';
77             tmp=tmp->next;
78         }
79         cout<<endl;
80     }else{
81         cout<<"b false"<<endl;
82     }
83     cout<<pmax->value<<endl;
84     if(change(a,5,7)){ //测试修改操作
85         Node *tmp=Find(a,7);
86         cout<<tmp->value<<endl;
87         tmp=a;
88         while(tmp->next!=NULL){
89             cout<<tmp->next->value<<' ';
90             tmp=tmp->next;
91         }
92     }else{
93         cout<<"change false"<<endl;
94     }
95     return 0;
96 }

 

posted @ 2018-04-25 09:27  ISGuXing  阅读(445)  评论(0编辑  收藏  举报