单向链表->单向循环链表

  1 #include <stdio.h>
  2 #include <iostream>
  3 #include <stdlib.h>
  4 
  5 using namespace std;
  6 
  7 struct Person{
  8     int age;
  9     struct Person *next;
 10 };
 11 Person *CrtHeadNode(){
 12     Person *head ,*tmp;
 13     head = tmp = NULL;
 14     Person *p=NULL;
 15     int n;
 16     cout<<"Node Number:"<<endl;
 17     cin>>n;
 18     for(int i = 0;i<n;i++){
 19         tmp = new Person;//(Person*)(malloc(sizeof(Person)));
 20         cout<<"Age:" <<endl;
 21         cin >>tmp->age;
 22         tmp->next=NULL;
 23         if(head){
 24             tmp->next = head;
 25             head  = tmp ;
 26         }else{
 27 
 28             p = head = tmp;
 29         }
 30     }
 31     p->next = head;
 32     return head;
 33 }
 34 
 35 Person *CrtTailNode(){
 36     Person *head,*tail,*tmp;
 37     int n;
 38     cout<<"Node Number:"<<endl;
 39     cin>>n;
 40     head = tail = tmp = NULL;
 41     for(int i = 0;i<n;i++){
 42         tmp = new Person;//(Person*)(malloc(sizeof(Person)));
 43         cout<<"Age:" <<endl;
 44         cin >>tmp->age;
 45         if(head){
 46             while(tail->next!=head){
 47                 tail = tail->next;
 48             }
 49             tail->next = tmp;
 50             tail = tmp;
 51             tmp->next=head;
 52     //        head = tail->next;
 53         }else{
 54             head = tail = tmp;
 55             tmp->next=head;
 56     //        head = tail->next;
 57         }
 58     }
 59     return head;
 60 }
 61 Person *FindNode(Person *head,int age){
 62     Person* tmp;
 63     tmp = NULL;
 64     tmp = head;
 65     do{
 66         if(tmp->age == age){
 67             break;
 68         }
 69         tmp  = tmp->next;
 70     }while(tmp!=head);
 71     if(tmp==head){
 72         return NULL;
 73     }
 74     
 75     /*
 76     while(tmp!=NULL){
 77         if(tmp->age ==age){
 78             break;
 79         }
 80         tmp = tmp->next;
 81     }
 82     if(tmp==NULL){
 83         return NULL;
 84     }*/
 85     return tmp;
 86     
 87 }
 88 int DelNode(Person *head,int age){
 89     Person *tmp;
 90     tmp = NULL;
 91     tmp = head;
 92     do{
 93         if(tmp->next->age == age){
 94             break;
 95         }
 96         tmp  = tmp->next;
 97     }while(tmp!=head);
 98     if(tmp==head){
 99         return 1;
100     }
101     /*
102     while(tmp->next!=NULL){
103         if(tmp->next->age==age){
104             break;
105         }
106         tmp = tmp->next;
107     }
108     if(tmp->next==NULL){
109         cout<<"DEL NOT FIND!"<<endl;;
110         return 1;
111     }*/
112     else{
113         Person *find = NULL;
114         find  = tmp->next;
115         tmp->next = find->next;
116         free(find);
117 //        delete find;
118     }
119     return 0;
120 
121 }
135 
136 void show(Person *head){
137 
138 /*    if(head==NULL){
139         cout<<"Empty"<<endl;
140     }
141     */
142     
143     Person *p;
144     p = head->next;
145     cout<<head->age<<endl;
146     while(p!=head){
147         cout<<p->age<<endl;
148         p = p->next;
149     }
150 /*
151     Person *p = head;
152     do{
153         cout<<p->age<<endl;
154         p = p->next;
155     }while(p!=head);*/
156 }
157 int main(){
158     Person *p;
159     Person *find;
160     p = CrtHeadNode();
161 //    p = CrtTailNode();
162 //    MakeEmptyNode(p);
163     
164     
165     find = FindNode(p,10);
166     if(find==NULL){
167         cout<<"Not find"<<endl;
168     }else{
169         cout<<"FindNode is:"<<find->age<<endl;
170     }
171     
172     int n=    DelNode(p,10);
173     if(!n){
174         cout<<"del success!"<<endl;
175     }/*
176     find = FindNode(p,10);
177     if(find==NULL){
178         cout<<"Not find"<<endl;
179     }else{
180         cout<<"FindNode is:"<<find->age<<endl;
181     }*/
182     show(p);
183     return 0;
184 }

posted on 2012-11-01 17:52  凌峰布衣  阅读(333)  评论(0编辑  收藏  举报

导航