1、 head = tail = pTmp = NULL; /链表构造函数 LinkList() Clear(); /链表析构函数/链表相关操作 int Length() return count; /用于获取当前标的长度 void Clear() while(count) DelHead(); /表清空 void Show(); /输出表中现有的所有元素 void ReShow(); /逆序输出表中现有的所有元素* GetPosP(int postion); /获取指向第postion个位置结点的指针 void HeadInsert(ET &e); /从表头插入元素 void TailInser
2、t(ET & /从表尾插入元素 void Insert(int position, ET & /向表中第postion个位置插入新的结点元素,元素总数加一 void ReTailInsert(int position, ET & /重置表中第cTmp个位置元素的数据部分为e,元素总数不变 void GetElem(int position, ET & /从表中获取第cTmp元素,写入e中,由e输出 void DelHead(); /删除表头 void DelTail(); /删除表尾 void DelElem(int position); /删除表中第cTmp个位置的元素.元素减一 void
3、operator = (LinkList& cop); /赋值符重载函数,实现链表的复制功能 void SUB(LinkList &A, LinkListB); /实现链表相减,将仅存在于A中的元素写入当前链表 void ADD(LinkList /实现链表相加,将表A 表B中的元素依次写入当前链表 void Seprate(); /奇偶分离函数,使得所有奇数均排列在偶数前 void Sort(); /对链表中的元素进行排序 void KillDouble(); /对链表中的元素进行排序去重 void CinHelp(); /提示输入函数,用于实现键盘输入交互式操作void LinkList:
4、Show() cTmp = count; pTmp = head; /指向头指针的第一个后继 coutendl当前链表中共有count0 & count0) /当表中有元素时 dataTmp = pTmp-data; coutdataTmpnext; /每输出一位向后移动一位 endl;ReShow() pTmp = tail;back;DblNode* LinkListGetPosP(int postion) cTmp = postion; if(cTmp1) coutcount) cTmp = cTmp % count; if(cTmp = 0) cTmp = count; /当输入位置大
5、于元素总数时取余数得对应位置 if(cTmp 1) pTmp = pTmp- cTmp-; else /后count/2用back指针访问 cTmp = count - cTmp + 1; pTmp = tail; /不断指向下一个结点,头指针所在位置为零 return pTmp;ReTailInsert(int position, ET &e) cTmp = position; if(count = 0)coutdata = e; /重置表中元素,元素总数不变HeadInsert(ET & if(count = 0) /向表中插入第一个结点元素 head = new DblNode coun
6、t+;back = new DblNodenext = head; head = head-TailInsert(ET & tail = new DblNodenext = new DblNode pTmp-back = tail; tail = pTmp; Insert(int position, ET &/在第pos个位置插入一个新结点 int pos = position; /因为此成员函数调用了获取指针位置函数GetPosP(),而该函数使用了cTmp计数区间,故需使用其他空间计数 if(poscount) /当输入位置大于元素总数时 if(pos % count = 1) pos =
7、 count+1; /输入位置大于元素总数且取余后为1,将pos置为插入尾部 else if(pos % count = 0) pos = count; else pos = pos % count; if(pos = 1) HeadInsert(e); else if(pos = count+1) TailInsert(e); else pTmp = GetPosP(pos-1); /获取指向第pos-1个结点的指针 DblNode /获取指向第pos个结点的指针 pTmp- /在pos-1后生成新结点next-back = pTmp; /新结点前驱为第pos-1个结点next = posN
8、ext; /新结点后继为原pos个结点 posNext-back = pTmp- /原pos个位置的结点前驱指向新结点 count+;GetElem(int position, ET & else e = GetPosP(cTmp)- /获取指向第cTmp个结点的数据部分DelHead()操作无效!当前表已为空 pTmp = head- delete head; head = pTmp; count-;DelTail() delete tail;DelElem(int positon) /删除在第cTmp个位置的结点 cTmp = positon; if(cTmpcount) cTmp = c
9、Tmp % count; else if(count = 1 | cTmp = 1)DelHead(); else if(cTmp = count) DelTail(); pTmp = GetPosP(cTmp-1); /获取指向第cTmp-1个结点的指针* pNext = pTmp- /获取指向第cTmp个结点的指针next = pNext- /将第cTmp-1个结点的后继指向第cTmp个结点的后继 pNext- /将第cTmp+1个结点的前驱指向第cTmp-1个结点 delete pNext; /将第cTmp个结点删除 /表元素元素总数减一operator = (LinkList0) cT
10、mp = cop.count; cop.pTmp = cop.head; /复制cop的头指针 注意:cop.pTmp 不可换做 pTmp ?否则运行报错 while(cTmp0) /当表中还有元素时 dataTmp = cop.pTmp- /取出后继结点中的数据 TailInsert(dataTmp); /生成新结点 cTmp -; /计数元素总数减一 cop.pTmp = cop.pTmp- /向后继结点移动一位SUB(LinkListB) /对当前链表先清空 int countA=1, countB; ET elemA, elemB;* posA = A.head, * posB; wh
11、ile(countA /依次获取A表中元素的数据部分 posA = posA- countA+; while(countB posB = posB- if(elemA=elemB) break; /将A中的每一个元素分别与B中的每一个元素进行比较,若相同则中断本次循环 countB+; if(countBB.count) TailInsert(elemA); /若与B中所有元素均不相同时将该元素写入当前表中ADD(LinkListdata); /依次获取A表中元素的数据部分,写入当前链表 while(countB /依次获取B表中元素的数据部分 posB = posB- countB+;Sep
12、rate() /奇偶分离函数,使得所有奇数均排列在偶数前 int i=0, jb=0, jc=0; int *B = new intcount, *C = new intcount; /将链表中的元素按奇数、偶数分别存放到数组B、C中* pos = head; ET tmp; while(i pos = pos- if(tmp%2 = 1) Bjb = tmp; jb+; /jb用于计数奇数的个数 else Cjc = tmp; jc+; /jc用于计数偶数的个数 i+; i = 0; pos = head; jb) /将奇数依次存回到链表中 pos-data = Bi; jc) /将偶数依次
13、存回到链表中奇数之后data = Ci;Sort() /对链表中的元素进行排序 int i=1, j;* posi = head, * posj; /初始时让posi指向第一个元素= count-1) /i循环至count-1 j=i+1; posj = posi- /初始时让posj指向第二个元素 while(j data posj-data) /若前面的元素大于后面的元素,则交换两元素的数据部分 tmp=posi- posi-data=posj-data=tmp; posj = posj- j+; posi = posi-KillDouble() Sort(); /对链表中的元素进行排序
14、int i=1; /初始时让pos指向第一个元素 count) /i循环至count-1 if(pos-data = pos-data) DelElem(i); /若第i个位置的元素和i+1个位置的元素数据部分相同时删除第i个元素 else i+; pos=pos- /否则指针指向下一个元素CinHelp() int choice=1, tmp; while(choice)请选择链表相关操作:1.添加新的元素 2.插入数据元素 3.删除表元素 4.修改元素 5.逆序输出表元素 6.链表清空 7.数据链表奇前偶后分离 8.数据链表元素排序 9.数据链表元素排序去重选择并以Enter确认: cinchoice; switch(choice) case 1: couttmp; choice = count; /链表中原有的元素数不应在计数范围内请依次输入tmp个数据元素 空格间隔 Enter确认: while(countdataTmp; TailInsert(dataTmp); Show(); break; case
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1