国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言數據結構實現鏈表去重的實例

2020-01-26 14:00:36
字體:
來源:轉載
供稿:網友

C語言數據結構實現鏈表去重的實例

題目及分析

鏈表去重

時間限制300 ms內存限制65536 kB代碼長度限制8000 B判題程序Standard

給定一個帶整數鍵值的單鏈表L,本題要求你編寫程序,刪除那些鍵值的絕對值有重復的結點。即對任意鍵值K,只有鍵值或其絕對值等于K的第一個結點可以被保留。同時,所有被刪除的結點必須被保存在另外一個鏈表中。例如:另L為21→-15→-15→-7→15,則你必須輸出去重后的鏈表21→-15→-7、以及被刪除的鏈表-15→15。

輸入格式:

輸入第一行包含鏈表第一個結點的地址、以及結點個數N(<= 105 的正整數)。結點地址是一個非負的5位整數,NULL指針用-1表示。

隨后N行,每行按下列格式給出一個結點的信息:

Address Key Next

其中Address是結點的地址,Key是絕對值不超過104的整數,Next是下一個結點的地址。

輸出格式:

首先輸出去重后的鏈表,然后輸出被刪除結點組成的鏈表。每個結點占一行,按輸入的格式輸出。

輸入樣例:

00100 599999 -7 8765423854 -15 0000087654 15 -100000 -15 9999900100 21 23854

輸出樣例:

00100 21 2385423854 -15 9999999999 -7 -100000 -15 8765487654 15 -1

三、代碼及結果

//L2-002. 鏈表去重/*輸入得到的是亂序鏈表,排個順序讓它成為正常的序列然后開始輸出鏈表,用集合set來輔助看是不是絕對之已經輸出過,如果是,就放在刪除鏈表所在的鏈 */#include <iostream>#include <algorithm> #include <set>#include <cmath>//abs函數 using namespace std;string firstAdd;int n;struct node{  string add;  int value;  string next;  int sortNul;  int vis;}a[10005],b[10005],d[10005]; bool operator <(const node &p,const node &p1){  return p.sortNul<p1.sortNul;}//讀入數據 void readData(){  cin>>firstAdd>>n;  for(int i=1;i<=n;i++){    cin>>a[i].add>>a[i].value>>a[i].next;    a[i].sortNul=0;    a[i].vis=0;  }} void printData(){  for(int i=1;i<=n;i++){    cout<<a[i].add<<" "<<a[i].value<<" "<<a[i].next<<" "<<a[i].sortNul<<endl;  }}//讓鏈表sortNum編號有序void findSortNum(){  string next(firstAdd);  for(int i=1;i<=n;i++){    for(int j=1;j<=n;j++){      if(!a[j].vis&&a[j].add==next){        a[j].sortNul=i;        a[j].vis=1;        next=a[j].next;        break;      }    }  }} //找到 去重鏈表b 和 刪除鏈表 d set<int> set1;int b1=0,d1=0;void findAns(){  for(int i=1;i<=n;i++){    if(!set1.count(abs(a[i].value))){      set1.insert(abs(a[i].value));      b[++b1]=a[i];    }     else{      d[++d1]=a[i];    }  }  //修正鏈表   for(int i=1;i<b1;i++){     b[i].next=b[i+1].add;   }    b[b1].next="-1";      for(int i=1;i<d1;i++){     d[i].next=d[i+1].add;   }    d[d1].next="-1";}//輸出去重鏈表和 刪除鏈表 void printAns(){  for(int i=1;i<=b1;i++){    cout<<b[i].add<<" "<<b[i].value<<" "<<b[i].next<<endl;  }  for(int i=1;i<=d1;i++){    cout<<d[i].add<<" "<<d[i].value<<" "<<d[i].next<<endl;  }} int main(){  //freopen("in.txt","r",stdin);  readData();  findSortNum();  sort(a+1,a+n+1);  //printData();  findAns();  //cout<<"-----------------------------------------"<<endl;   printAns();  return 0;}

以上就是對鏈表去重的講解,本地對于數據結構的文章還很多,希望大家能搜索查看,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 嘉兴市| 当涂县| 鹤峰县| 甘肃省| 梅河口市| 高陵县| 连云港市| 义马市| 山西省| 璧山县| 西华县| 武冈市| 宝坻区| 温州市| 石台县| 廉江市| 邢台市| 托克托县| 新乡县| 香港| 滨州市| 尚义县| 同德县| 礼泉县| 镇宁| 高邑县| 吉林省| 宁远县| 沂源县| 九龙城区| 太保市| 西青区| 九龙县| 珲春市| 新乐市| 徐汇区| 怀宁县| 余姚市| 搜索| 庆城县| 宁武县|