好吧…我要來獻醜一下
這也是幫學弟做的作業,再改的簡單一點的
因為是改的,所以也許會有些奇怪的地方或bug
還請多指教….
說一下這程式的功能好了
可以讀名字的文字檔(.txt),或手動加入名字
移除指定名字和列出所有名字
還有指定名字顯示位置….
其實原本作業要求很多功能,我覺得太瑣碎就拿掉了
資料結構原本是環狀串列,我改成單一普通的鏈結串列
以下就參考參考囉….
#include<iostream> #include<fstream> #include<string> #include<conio.h> using namespace std; int element=0; struct node { string name; node *next; }; node *head=new node; node *tail=new node; void *readfile(){ char filename[30]; cout<<"enter filename:"; cin>>filename; ifstream fin(filename); if(!fin) { cout << "無法讀入檔案\n"; system("pause"); exit(0); } node *pre = new node; fin>>pre->name; if(head->next==NULL)head->next=pre; else tail->next=pre; element++; while(!fin.eof()) { node *tmp = new node; fin>>tmp->name; pre->next=tmp; pre=tmp; element++; } tail=pre; } void display(node *list){ list=list->next;//跳過head if(list==NULL) { cout<<"空的"<<endl; } for(int i=0;i<element;i++) { cout<<"name: "<<list->name<<endl; list=list->next; } } //加入指定名字 void add(node *list){ node *tmp=new node; cout<<"enter the name:"; cin>>tmp->name; if(head->next==NULL) { tmp->next=head->next; head->next=tmp; tail=tmp; } else { tmp->next=list->next; list->next=tmp; tail=tmp; } element++; } //刪除指定名字 void del(node *list){ string delname; node *pre=new node; cout<<"enter the delete name:"; cin>>delname; for(int i=0;i<=element;i++) { if(list->name==delname) { cout<<"delete the "<<list->name<<" !!"<<endl; pre->next=list->next; free(list); element--; } pre=list; list=list->next; } } //指定名字顯示位置 void showposition(node *list){ string fname; cout<<"enter the find name:"; cin>>fname; for(int i=0;i<=element;i++) { if(list->name==fname) { cout<<"the "<<list->name<<" position is ["<<i<<"]"<<endl; break; } list=list->next; } } int main(){ char comand; bool exit=false; while(!exit){ cout<<" ==MENU=="<<endl; cout<<"r、 Add name from file name.txt"<<endl; cout<<"a、 Add a new name into the list"<<endl; cout<<"d、 Delete a name from the list"<<endl; cout<<"f、 Find a name and return the position of the name in the list."<<endl; cout<<"p、 Print out all the names in the list."<<endl; cout<<"q、 Exit the program."<<endl; cout<<" whitch one?"; comand=getch(); cout<<comand<<endl; switch(comand){ case 'r': readfile(); cout<<"Creat Success!"<<endl; break; case 'a': add(tail); break; case 'd': del(head); break; case 'f': showposition(head); break; case 'p': display(head); break; case 'q': cout<<"bye bye ~!"<<endl; exit=true; break; default: break; } system("pause"); system("cls"); } return 0; }
會了linked list真的世界都不同了欸~
真是恨自己太晚會阿~
一邊寫一邊回想以前有人說著它的一切
都一一的成真了….