亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? p216.cpp

?? 清華大學-數據結構(課件+習題+課后答案)
?? CPP
字號:
#include "iostream.h"
template <class Type> class SetList;					//用以表示集合的有序鏈表的類的前視定義

template <class Type> class SetNode {					//集合的結點類定義


public:
   SetNode ():link(NULL){};
   SetNode (const Type & item ) : data (item), link (NULL){};		//構造函數
friend class SetList<Type>;
friend ostream& operator <<(ostream& strm, SetList<Type>& a);
private:
   Type data;								//每個成員的數據
   SetNode<Type> *link;							//鏈接指針
};

template <class Type> class SetList {					//集合的類定義
public:
   SetList ( );								//構造函數
   void MakeEmpty ( );							//置空集合
   int AddMember ( const Type & x );					//把新元素x加入到集合之中
   int DelMember ( const Type & x );					//把集合中成員x刪去
   void operator = ( SetList<Type> & right );			//復制集合right到this。
   void operator + ( SetList<Type> & right );			//求集合this與集合right的并
   void operator * ( SetList<Type> & right );			//求集合this與集合right的交
   void operator - ( SetList<Type> & right );				//求集合this與集合right的差
   int Contains ( const Type & x );					//判x是否集合的成員
   int operator == ( SetList<Type> & right );			//判集合this與集合right相等
   Type & Min ( );								//返回集合中的最小元素的值
   Type & Max ( );							//返回集合中的最大元素的值
   friend ostream& operator <<(ostream& strm, SetList<Type>& a);
private:
   SetNode<Type> *first, *last;						//有序鏈表的表頭指針, 表尾指針
}
template <class Type> void SetList<Type>::SetList ( ) {
//本操作建立集合鏈表的頭結點, 并將鏈表置空。
   first = last = new SetNode<Type>();  first->link = NULL;
}

template <class Type> void SetList<Type>::MakeEmpty(void){
   SetNode<Type> *tmp1=first->link,*tmp2;
   first->link=NULL;
   last=first;
   while (tmp1)
   {
     tmp2=tmp1;
     tmp1=tmp1->link;
     delete tmp2;
   }
}
template <class Type> int SetList<Type>::Contains ( const Type & x ) {
//測試函數: 如果x是集合的成員, 則函數返回1, 否則返回0。
   SetNode<Type> *temp = first->link;					//鏈的掃描指針
   while ( temp != NULL && temp->data < x ) temp = temp->link;	//循鏈搜索
   if ( temp != NULL && temp->data == x ) return 1;			//找到, 返回1
   else return 0;									//未找到, 返回0
}

template <class Type> int SetList<Type>::AddMember ( const Type & x ) {
//把新元素x加入到集合之中。若集合中已有此元素, 則函數返回0, 否則函數返回1。
   SetNode<Type> *p = first->link,  *q = first;				//p是掃描指針, q是p的前驅
   while ( p != NULL && p->data < x ) { q = p;  p = p->link; }	//循鏈掃描
   if ( p != NULL && p->data == x ) return 0;				//集合中已有此元素
   SetNode<Type> *s = new SetNode<Type> (x);					//創建數據值為x的新結點
   s->link = p;  q->link = s;							//鏈入有序鏈表, 插入位置在q、p之間
   if ( p == NULL ) last = s;							//鏈到鏈尾時要改鏈尾指針
   return 1;
}

template <class Type> int SetList<Type>::DelMember ( const Type & x ) {
//把集合中成員x刪去。若集合不空且元素x在集合中, 則函數返回1, 否則返回0。
   SetNode<Type> *p = first->link,  *q = first;
   while ( p != NULL && p->data < x ) { q = p;  p = p->link; }	//循鏈掃描
   if ( p != NULL && p->data == x ) {					//找到
	 q->link = p->link;							//重新鏈接, , x位置在p所指結點
	 if ( p == last ) last = q;							//刪去鏈尾結點時要改鏈尾指針
	 delete p;  return 1;							//刪除含x結點
   }
   else return 0;									//集合中無此元素
}
template <class Type> void SetList<Type>::operator = ( SetList<Type> & right ) {
//復制集合right到this。
   SetNode<Type> *pb = right.first->link;				//復制源集合
   SetNode<Type> *pa = first = new SetNode<Type>;		//復制目標集合, 創建表頭結點
   while ( pb != NULL ) {						//在鏈中逐個結點復制
	 pa->link = new SetNode<Type> (pb->data);		//創建this鏈下一個新結點
	 pa = pa->link;  pb = pb->link;				// pa進到新結點位置,  pb進到下一結點
   }
   pa->link = NULL;  last = pa;					//目標鏈表收尾
}

template <class Type> void SetList<Type>::operator + ( SetList<Type> & right ) {
//求集合this與集合right的并, 計算結果在this集合中, right集合不變。
   SetNode<Type> *pb = right.first->link;				//right集合的鏈掃描指針
   SetNode<Type> *pa = first->link;					//this集合的鏈掃描指針
   SetNode<Type> *pc = first;						//結果鏈的頭結點和存放指針
   while ( pa != NULL && pb != NULL ) {				//兩鏈數據兩兩比較
	 if ( pa->data == pb->data )					//兩集合共有元素
	   { pc->link = pa;  pa = pa->link;  pb = pb->link; }
	 else if ( pa->data < pb->data )
	   { pc->link = pa;  pa = pa->link; }				//this中元素值小
	 else					//right集合中元素值小, 創建新結點, 鏈入結果鏈
	   { pc->link = new SetNode<Type> (pb->data);  pb = pb->link; }
	 pc = pc->link;
   }
   if ( pa != NULL ) pc->link = pa;					//this集合未掃完, 鏈接
   else {									//right集合未掃完,
	 while ( pb != NULL )						//向this集合逐個復制
	   { pc->link = new SetNode<Type> (pb->data);  pc = pc->link;  pb = pb->link; }
	 pc->link = NULL;  last = pc;					//鏈表收尾
   }
}

template <class Type> void SetList<Type>::operator * ( SetList<Type> & right ) {
//求兩個集合的交, 結果保存在this集合中, right集合不變
   SetNode<Type> *pb = right.first->link;				//right集合的鏈掃描指針
   SetNode<Type> *pa = first->link;					//this集合的鏈掃描指針
   SetNode<Type> *pc = first;						//結果鏈的頭結點和存放指針
   while ( pa != NULL && pb != NULL ) {				//兩鏈數據兩兩比較
	 if ( pa->data == pb->data )					//兩集合公有的元素
	   { pc = pc->link;  pa = pa->link;  pb = pb->link; }
	 else if ( pa->data < pb->data )				//this集合中元素值小, 刪去這個元素
	   { pc->link = pa->link;  delete pa;  pa = pc->link; }
	 else pb = pb->link;						//right集合中元素值小, pb指針進1
   }
   while ( pa != NULL )							//逐個刪去this集合中非公共元素
	 { pc->link = pa->link;  delete pa;  pa = pc->link; }
   last = pc;									//置鏈尾指針
}

template <class Type> void SetList<Type>::operator - ( SetList<Type> & right ) {
//求集合this與集合right的差。結果保留在集合this中, 集合right不變。
   SetNode<Type> *pb = right.first->link;				//right集合的鏈掃描指針
   SetNode<Type> *pa = first->link;					//this集合的鏈掃描指針
   SetNode<Type> *pc = first;						//結果鏈的頭結點和存放指針
   while ( pa != NULL && pb != NULL ) {				//兩兩比較
	 if ( pa->data == pb->data )					//兩集合共有的元素, 從this鏈中刪去
	   { pc->link = pa->link;  delete pa;  pa = pc->link;  pb = pb->link; }
	 else if ( pa->data < pb->data )				//this集合中的元素值小, 保留
	   { pc = pc->link;  pa = pa->link; }
	 else pb = pb->link;						//不要, 向前繼續檢測
   }
   if ( pa == NULL ) last = pc;						//pa!=NULL時, 原來的last不變
}

template <class Type> int SetList<Type>::operator == ( SetList<Type> & right ) {
//當且僅當集合this與集合right相等時, 函數返回1, 否則返回0。
   SetNode<Type> *pb = right.first->link;				//right集合的鏈掃描指針
   SetNode<Type> *pa = first->link;					//this集合的鏈掃描指針
   while ( pa != NULL && pb != NULL )
	 if ( pa->data == pb->data )					//相等, 繼續檢測
	   { pa = pa->link;  pb = pb->link; }
	 else return 0;							//掃描途中不等時退出, 返回0
   if ( pa != NULL || pb != NULL ) return 0;			//鏈不等長時, 返回0
   return 1;
}
template <class Type>
ostream& operator <<(ostream& strm, SetList<Type>& a)
{
  SetNode<Type> *p=a.first;
  if (a.first!=a.last)
  {
    do
    {
     p=p->link;
     strm<<p->data<<' ';
    }while (p!=a.last);
  }
  strm<<endl;
   return strm;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久综合视频| 欧美国产精品一区| 成人国产亚洲欧美成人综合网| 五月天一区二区三区| 樱桃视频在线观看一区| 亚洲免费观看高清完整版在线| 国产精品精品国产色婷婷| 国产精品精品国产色婷婷| 日韩伦理av电影| 一区二区三区欧美在线观看| 亚洲第一主播视频| 肉色丝袜一区二区| 国内久久精品视频| 岛国av在线一区| 在线免费观看日本一区| 欧美视频一区二区三区在线观看 | 另类综合日韩欧美亚洲| 奇米色777欧美一区二区| 国产一区二区伦理| 99国产精品久| 欧美日韩国产首页在线观看| 欧美成人在线直播| 国产欧美一二三区| 亚洲一区二区三区在线| 久久精品国产一区二区三区免费看 | 国产精品一区一区三区| 不卡电影一区二区三区| 欧美日韩一区二区在线观看| 欧美xxxxx牲另类人与| 国产目拍亚洲精品99久久精品| 亚洲欧美另类图片小说| 日本伊人色综合网| 99久久免费精品| 欧美日本不卡视频| 国产亚洲1区2区3区| 亚洲国产欧美在线| 国产精品一区二区在线播放| 色94色欧美sute亚洲线路一久| 欧美一区二区三区小说| 国产精品久久久久久久蜜臀| 午夜精品久久久久久久久| 国产自产高清不卡| 欧美日韩综合不卡| 一区二区三区中文在线| 国产精品影视在线| 制服丝袜中文字幕亚洲| 国产精品国模大尺度视频| 日韩和欧美的一区| 一本色道a无线码一区v| 久久久久久一二三区| 一区二区三区久久| 成人永久免费视频| 日韩免费性生活视频播放| 亚洲美女在线一区| 成人性生交大合| 欧美不卡一区二区三区四区| 亚洲专区一二三| 99国产精品视频免费观看| 欧美一区二区美女| 天堂蜜桃一区二区三区| 色偷偷88欧美精品久久久| 国产欧美综合在线观看第十页| 日韩精品成人一区二区在线| 91豆麻精品91久久久久久| 国产精品理伦片| 国产69精品久久777的优势| 精品电影一区二区三区| 麻豆精品久久久| 3atv在线一区二区三区| 石原莉奈在线亚洲二区| 精品视频一区二区不卡| 亚洲人快播电影网| 一本久道中文字幕精品亚洲嫩| 国产欧美日韩视频在线观看| 国产精品亚洲第一| 国产丝袜在线精品| 丁香婷婷综合色啪| 中文在线免费一区三区高中清不卡| 国产老妇另类xxxxx| 精品黑人一区二区三区久久| 六月婷婷色综合| 久久夜色精品一区| 成人性生交大片免费看视频在线 | 99视频国产精品| 国产精品免费看片| 91色在线porny| 亚洲综合在线免费观看| 欧美日韩在线不卡| 奇米影视一区二区三区小说| 日韩欧美123| 成人免费视频视频| 一区二区三区91| 欧美巨大另类极品videosbest | 久久综合九色综合欧美亚洲| 国产资源精品在线观看| 中文av一区特黄| 在线视频观看一区| 日本亚洲欧美天堂免费| 久久影院视频免费| 色一区在线观看| 日韩国产欧美一区二区三区| 精品国产精品网麻豆系列| 国产成人综合在线播放| 亚洲黄色免费电影| ww亚洲ww在线观看国产| 99久久国产综合精品麻豆| 亚洲一区二区三区在线看| 欧美大片免费久久精品三p| 成人动漫精品一区二区| 午夜精品福利一区二区三区蜜桃| 日韩欧美国产1| 97久久精品人人爽人人爽蜜臀| 天天操天天色综合| 中文字幕乱码一区二区免费| 欧美日韩高清不卡| 99久久综合99久久综合网站| 三级成人在线视频| 国产精品乱人伦| 欧美一区二区久久久| 99久精品国产| 精品午夜久久福利影院| 亚洲一区二区3| 久久九九影视网| 欧美丰满嫩嫩电影| 91色|porny| 国产精品一级在线| 日本免费新一区视频| 一区二区在线观看av| 国产日产欧美一区二区三区| 欧美精品欧美精品系列| 91欧美一区二区| 岛国精品一区二区| 韩国中文字幕2020精品| 亚洲v中文字幕| 亚洲综合久久久| 中文字幕不卡三区| 亚洲色欲色欲www| 国产三区在线成人av| 欧美成人r级一区二区三区| 欧洲人成人精品| 91丨九色丨尤物| 成人网男人的天堂| 精品亚洲国内自在自线福利| 日韩激情在线观看| 亚洲国产精品久久久久秋霞影院 | 日日嗨av一区二区三区四区| 亚洲精品v日韩精品| 亚洲乱码一区二区三区在线观看| 国产喷白浆一区二区三区| 久久久www成人免费无遮挡大片| 欧美变态tickle挠乳网站| 欧美一区二区三区四区视频| 91精品在线免费观看| 欧美日本视频在线| 91麻豆精品国产| 9191成人精品久久| 日韩精品一区二区三区老鸭窝| 欧美高清激情brazzers| 欧美一级日韩不卡播放免费| 91精品啪在线观看国产60岁| 日韩三级电影网址| 欧美成va人片在线观看| 久久日一线二线三线suv| 精品国产伦一区二区三区观看体验| 日韩一区二区三区观看| 久久这里只有精品首页| 久久伊99综合婷婷久久伊| 国产欧美日韩视频在线观看| 中文乱码免费一区二区| 一区二区三区在线观看动漫| 亚洲国产欧美一区二区三区丁香婷| 日韩精品一二三| 激情图片小说一区| 波多野结衣在线一区| 在线视频国产一区| 国产精品对白交换视频| 亚洲乱码一区二区三区在线观看| 亚洲午夜精品久久久久久久久| 日本欧美肥老太交大片| 国产成人综合自拍| 在线观看欧美日本| 欧美xxxxx裸体时装秀| 国产精品第一页第二页第三页| 亚洲午夜影视影院在线观看| 久久爱www久久做| 91亚洲精品久久久蜜桃网站 | 捆绑变态av一区二区三区| 国产成人小视频| 欧美色欧美亚洲另类二区| 日韩免费看的电影| 玉米视频成人免费看| 韩国v欧美v亚洲v日本v| 91成人网在线| 国产日本欧洲亚洲| 日日骚欧美日韩| 91麻豆免费看片| 国产日韩欧美高清| 欧美a一区二区| 欧美日韩一区成人| 国产精品福利电影一区二区三区四区|