1. 程式人生 > >ALDS1_3_C-list的使用-雙向連結串列

ALDS1_3_C-list的使用-雙向連結串列

挑戰程式設計競賽 上的題
list的練習題;
有一個地方卡了,在用迭代器找的時候,如果不用break就卡了。。
樣例都過不了。。其實我感覺都差不多。
因為list是雙向連結串列,不停止就沒完沒了。。。。
王阿川教授還說list方便刪除和插入,但是如果查詢的話,和陣列幾乎是一樣的,連結串列的用處不大,不過可以用於其他資料結構的建立。。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <list>
#include <string>
#include <iterator>
using namespace std; //list的操作 /*1 q.push_front(x); 2 q.push_back(x); 3 q.pop_front(); 4 q.pop_back(); 5 insert(p,x)p chu fang x erase(p) 刪除位置p的元素 */ int main() { int n; list<int>q; scanf("%d",&n); string x; int sum; //getchar(); //cout<<n<<endl; for(int i=1
;i<=n;i++) { cin>>x; if(x[0]=='i') { cin>>sum; q.push_front(sum); //printf("%d****",sum); continue; } else if(x[0]=='d'&&x.length()>6) { if(x[6]=='F') { q.pop_front(); continue
; } else if(x[6]=='L') q.pop_back(); continue; } else if(x[0]=='d'&&x.length()==6) {cin>>sum; /*for(int i=0;i<q.size();i++) if(i+1==x) {q.erase(i); break;} }*/ //printf("%d\n",sum); for(list<int>::iterator it=q.begin();it!=q.end();it++) { if(*it==sum) {q.erase(it); break;//把break去掉就錯了,無法停止 } } continue; } } int xx=0; for(list<int>::iterator it=q.begin();it!=q.end();it++) { if(xx++) printf(" "); printf("%d",*it); } printf("\n"); // int y; //scanf("%d",&y); return 0; }