国产探花免费观看_亚洲丰满少妇自慰呻吟_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;}

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

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

圖片精選

主站蜘蛛池模板: 广宁县| 谢通门县| 楚雄市| 灵宝市| 贺兰县| 扶绥县| 象州县| 汪清县| SHOW| 齐河县| 澄城县| 台北市| 秀山| 囊谦县| 高州市| 普兰店市| 龙里县| 黄冈市| 澜沧| 南丰县| 全椒县| 安阳市| 越西县| 右玉县| 广水市| 沙湾县| 南涧| 洛南县| 民丰县| 稷山县| 乌审旗| 二连浩特市| 小金县| 麻城市| 台中县| 革吉县| 南京市| 孝义市| 宁波市| 安陆市| 滦南县|