一个链表类 大成时应该做成模板类的

总结就是一句话:还没写完 

所以各位看官如果觉得写得不堪入目,我在这给您道歉了~~~

代码在codeblocks上调试通过

已定义的函数都能正常使用。

目前还没发现别的什么bug,如果有发现,还望指正~~~

/************START****************/

  1 #include <iostream>
  2 #include <cstdlib>
  3 #define badswap(a,b) {(a)+=(b);(b)=(a)-(b);(a)=(a)-(b);}
  4 #define swap(a,b) if(&a==&b);else{(a)+=(b);(b)=(a)-(b);(a)=(a)-(b);}
  5 //The bug of it is if a and b is the same one value,it will be zero
  6 //the uper define has risk to overflow
  7 //but I think it OK now
  8 /*
  9 Bug correct
 10 At the CreatList function,I think it's better for me to use
 11 new form to deal with list creating
 12 */
 13 using namespace std;
 14 
 15 typedef struct Item
 16 {
 17     int num;
 18     Item *next;
 19     //wait to be added in new elements
 20 }item;
 21 class List
 22 {
 23     private:
 24             item *head,*last,*pointer;
 25             int maxsize;
 26             int presize;
 27             int prelocation;//present location
 28             //
 29     public:
 30             List(int max=10);
 31             List(const List &);
 32             bool CreatList();
 33             bool insert(const item &it,int position);//two arguments is needed
 34             item* search(item)const;//no implementation
 35             bool sort();//finished
 36             void show()const;
 37             ~List();
 38             //friend istream &operator>>(istream & is,List )
 39             //It seems to be a little difficult to do this,so canceled temporary
 40 };
 41 List::List(int max)
 42 {
 43     head=last=pointer=NULL;
 44     maxsize=max;
 45     presize=0;
 46     prelocation=0;
 47 }
 48 List::List(const List &Another_L)//There is some problem in it~~~
 49 {
 50     cout<<"working~"<<endl;
 51     if(Another_L.head==NULL)
 52         abort();
 53     item *current,*pre,*Ahead=Another_L.head;
 54     head=NULL;
 55     while(Ahead!=NULL)
 56     {
 57         if(head==NULL)
 58         {
 59             head=new item;
 60             if(head==NULL)
 61                 abort();
 62             head->num=Ahead->num;
 63             pre=head;
 64             Ahead=Ahead->next;
 65             presize++;
 66             continue;
 67         }
 68         current=new item;
 69         if(current==NULL)
 70             abort();
 71         //checked that it's OK
 72         current->next=NULL;//next initial
 73         pre->next=current;//lingking~~~
 74         pre=current;//save present pointer
 75         //I think I am right to do so when there is no pointer in Item
 76         *current=*Ahead;
 77         //~~~~~~~~~~~~~~
 78         Ahead=Ahead->next;
 79         //finished
 80     }
 81     cout<<"Copy constructor is finished\n";
 82 }
 83 bool List::CreatList()
 84 {
 85     item *current,*pre;
 86     int inttemp;
 87     cout<<"This List support int Only now~~\n";
 88     head=new item;
 89     if(head==NULL)
 90         return false;
 91     pre=head;
 92     pre->next=NULL;
 93     cin>>pre->num;
 94     if(cin.fail())
 95     {
 96         delete head;
 97         head=NULL;
 98         cout<<"Wrong input\n";
 99         return false;
100     }
101     //cout<<maxsize<<endl;
102     presize++;//number counter
103     while(presize<maxsize)
104     {
105         cin>>inttemp;
106         if(cin.fail())
107             break;
108         current=new item;
109         if(current==NULL)
110             return false;
111         current->num=inttemp;
112         pointer=pre;//signal
113         pre->next=current;
114         pre=current;
115         current->next=NULL;
116         presize++;
117         //cin>>current->num;
118     }
119     return true;
120 }
121 bool List::insert(const item &it,int position)//insert function
122 {
123     item *temp=head,*pre;
124     if(position>presize)
125     {
126         cout<<"there is no position to add"<<endl;
127         return false;
128     }
129     for(int i=1;i<position;i++)
130     {
131         pre=temp;
132         temp=temp->next;
133     }
134     pre->next=new item;
135     if(pre->next==NULL)
136     {
137         pre->next=temp;
138         return false;
139     }
140     *(pre->next)=it;
141     pre->next->next=temp;
142     return true;
143 }
144 void List::show()const
145 {
146     item *temp;
147     temp=head;
148     cout<<"Present size of the List: "<<presize<<endl;
149     while(temp!=NULL)
150     {
151         cout<<temp->num<<ends;
152         temp=temp->next;
153     }
154     cout<<endl;
155 }
156 bool List::sort()
157 {
158     item *pointer=head;//initial
159     item *swappointer,*waittoswap;
160     if(pointer==NULL)
161         return false;
162     if(presize==1)
163     {
164         cout<<"there is olny one valid value in the list\n";
165         return true;
166     }
167     //temp data
168     int max;//used to sign the max number in the list
169     //save the present infomation
170     waittoswap=pointer;
171     max=pointer->num;
172     swappointer=pointer;
173     //used for swap
174     //the uper part has no problem;
175     //this part can find the maxnumber in the list
176     while(waittoswap->next!=NULL)
177     {
178         max=pointer->num;
179         while(pointer->next!=NULL)
180         {
181             if(max<pointer->next->num)
182             {
183                 max=pointer->next->num;
184                 swappointer=pointer->next;
185             }
186             pointer=pointer->next;//tempswap and pointer must be the same position at the beginning
187         }
188         //show();
189         cout<<max<<endl;
190         swap(waittoswap->num,swappointer->num);
191         waittoswap=waittoswap->next;
192         //this is used to initial the present pointer
193         //it's very important
194         pointer=waittoswap;
195         swappointer=waittoswap;
196     }
197     return true;
198     //
199 }
200 List::~List()
201 {
202     item *temp;
203     temp=head;
204     while(temp!=NULL)
205     {
206         //cout<<temp->num<<ends;
207         head=temp->next;
208         delete temp;
209         temp=head;
210     }
211     //abort();
212     cout<<"\ndestructor is finished\n";
213 }
214 int main()
215 {
216     cout << "Hello world!" << endl;
217     List temp;
218     temp.CreatList();
219     temp.sort();
220     temp.show();
221     return 0;
222 }
223     //insert test psrt
224     //item asd={99,NULL};
225     //temp.CreatList();
226     //temp.show();
227     //temp.insert(asd,10);
228     //temp.show();
229     /*int a=0xFFFFFFFF,b=12345;
230     swap(a,b);
231     cout<<(int*)a<<ends<<b<<ends;
232     */
233     /*cin>>a;
234     if(cin.fail())
235     cout<<"can't read\n";
236     else
237     cout<<"can read\n";*/
238     //int a;
239     /*
240         insidec=count;
241         while((insidec--)>1)
242             {
243                 if(swaptemp>pointer->next->num)
244                 {
245                     swaptemp=pointer->next->num;
246                 }
247                 pointer=pointer->next;
248                 cout<<pointer->next->num<<ends;
249             }
250         swap(swaptemp,swappointer->num);
251         pointer=head;
252         swappointer=pointer;
253         */
254 //#define swap1(a,b) {(a)+=(b);(b)=(a)-(b);(a)=(a)-(b);}

新添加了sort函数,排除了CreatList中的Bug。

另外新发现了一个这里的宏定义Bug

 

posted @ 2012-10-20 00:54  Matrix_R  阅读(245)  评论(0编辑  收藏  举报