ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:33.58KB ,
资源ID:4932036      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4932036.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构 矩阵操作.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构 矩阵操作.docx

1、数据结构 矩阵操作运行时的显示界面,可选择相应操作#include/多用链表结点templatestruct DblNode ET data; /结点数据域,存储该结点的数据部分 DblNode* next; /结点指针域,指示下一个节点的位置 DblNode* back; /指向结点的前驱 DblNode() next = NULL; back = NULL; /无参数结点构造函数,用于未给定参数时结点的初始化;/=/ 链表类 部分/=templateclass LinkList protected: ET dataTmp; /用于临时存取数据,供成员函数使用 int count, cTmp

2、; /count用于计数表元素个数,即表长; cTmp用于临时计数用 DblNode *head, *tail, *pTmp; /*head记录表头的位置; *tail记录表尾的位置; *pTmp记录每次操作结点的指针位置 public: LinkList() count=cTmp=0; head = tail = pTmp = NULL; /链表构造函数 LinkList() Clear(); /链表析构函数/链表相关操作 int Length() return count; /用于获取当前标的长度 void Clear() while(count) DelHead(); /表清空 void

3、 Show(); /输出表中现有的所有元素 void ReShow(); /逆序输出表中现有的所有元素 DblNode* GetPosP(int postion); /获取指向第postion个位置结点的指针 void HeadInsert(ET &e); /从表头插入元素 void TailInsert(ET &e); /从表尾插入元素 void Insert(int position, ET &e); /向表中第postion个位置插入新的结点元素,元素总数加一 void ReTailInsert(int position, ET &e); /重置表中第cTmp个位置元素的数据部分为e,元

4、素总数不变 void GetElem(int position, ET &e); /从表中获取第cTmp元素,写入e中,由e输出 void DelHead(); /删除表头 void DelTail(); /删除表尾 void DelElem(int position); /删除表中第cTmp个位置的元素.元素减一 void operator = (LinkList& cop); /赋值符重载函数,实现链表的复制功能 void SUB(LinkList &A, LinkList &B); /实现链表相减,将仅存在于A中的元素写入当前链表 void ADD(LinkList &A, LinkLi

5、st &B); /实现链表相加,将表A 表B中的元素依次写入当前链表 void Seprate(); /奇偶分离函数,使得所有奇数均排列在偶数前 void Sort(); /对链表中的元素进行排序 void KillDouble(); /对链表中的元素进行排序去重 void CinHelp(); /提示输入函数,用于实现键盘输入交互式操作;templatevoid LinkList:Show() cTmp = count; pTmp = head; /指向头指针的第一个后继 coutendl当前链表中共有count个元素,endl0 & count0) /当表中有元素时 dataTmp = p

6、Tmp-data; coutdataTmpnext; /每输出一位向后移动一位 coutendl;templatevoid LinkList:ReShow() cTmp = count; pTmp = tail; /指向头指针的第一个后继 coutendl当前链表中共有count个元素,endl0 & count0) /当表中有元素时 dataTmp = pTmp-data; coutdataTmpback; /每输出一位向后移动一位 coutendl;templateDblNode* LinkList:GetPosP(int postion) cTmp = postion; if(cTmp1

7、) coutendl操作无效! 请确保输入元素位置大于0count) cTmp = cTmp % count; if(cTmp = 0) cTmp = count; /当输入位置大于元素总数时取余数得对应位置 if(cTmp 1) pTmp = pTmp-next; cTmp-; else /后count/2用back指针访问 cTmp = count - cTmp + 1; pTmp = tail; /不断指向下一个结点,头指针所在位置为零 while(cTmp1) pTmp = pTmp-back; cTmp-; return pTmp;templatevoid LinkList:ReTa

8、ilInsert(int position, ET &e) cTmp = position; if(count = 0)coutendl表当前为空,无元素可修改data = e; /重置表中元素,元素总数不变templatevoid LinkList:HeadInsert(ET &e) if(count = 0) /向表中插入第一个结点元素 head = new DblNode; tail = pTmp = head; head-data = e; count+; else head-back = new DblNode; head-back-next = head; head = head-

9、back; head-data = e; count+; templatevoid LinkList:TailInsert(ET &e) if(count = 0) /向表中插入第一个结点元素 tail = new DblNode; head = pTmp = tail; tail-data = e; count+; else tail-next = new DblNode; pTmp = tail-next; pTmp-back = tail; tail = pTmp; tail-data = e; count+; templatevoid LinkList:Insert(int posit

10、ion, ET &e)/在第pos个位置插入一个新结点 int pos = position; /因为此成员函数调用了获取指针位置函数GetPosP(),而该函数使用了cTmp计数区间,故需使用其他空间计数 if(pos1) coutendl操作无效! 请确保输入元素位置大于0count) /当输入位置大于元素总数时 if(pos % count = 1) pos = count+1; /输入位置大于元素总数且取余后为1,将pos置为插入尾部 else if(pos % count = 0) pos = count; else pos = pos % count; if(pos = 1) He

11、adInsert(e); else if(pos = count+1) TailInsert(e); else pTmp = GetPosP(pos-1); /获取指向第pos-1个结点的指针 DblNode* posNext = pTmp-next; /获取指向第pos个结点的指针 pTmp-next = new DblNode; /在pos-1后生成新结点 pTmp-next-back = pTmp; /新结点前驱为第pos-1个结点 pTmp-next-next = posNext; /新结点后继为原pos个结点 pTmp-next-data = e; posNext-back = pT

12、mp-next; /原pos个位置的结点前驱指向新结点 count+; templatevoid LinkList:GetElem(int position, ET &e) cTmp = position; if(cTmp1) coutendl操作无效! 请确保输入元素位置大于0data; /获取指向第cTmp个结点的数据部分templatevoid LinkList:DelHead() if(count = 0)coutendl操作无效!当前表已为空next; delete head; head = pTmp; count-; templatevoid LinkList:DelTail()

13、if(count = 0)coutendl操作无效!当前表已为空back; delete tail; tail = pTmp; count-; templatevoid LinkList:DelElem(int positon) /删除在第cTmp个位置的结点 cTmp = positon; if(cTmpcount) cTmp = cTmp % count; if(count = 0)coutendl表当前为空,无元素可修改endl; else if(count = 1 | cTmp = 1)DelHead(); else if(cTmp = count) DelTail(); else p

14、Tmp = GetPosP(cTmp-1); /获取指向第cTmp-1个结点的指针 DblNode* pNext = pTmp-next; /获取指向第cTmp个结点的指针 pTmp-next = pNext-next; /将第cTmp-1个结点的后继指向第cTmp个结点的后继 pNext-next-back = pTmp; /将第cTmp+1个结点的前驱指向第cTmp-1个结点 delete pNext; /将第cTmp个结点删除 count-; /表元素元素总数减一 templatevoid LinkList:operator = (LinkList& cop) /赋值符“ = ”重载 C

15、lear(); /对当前链表先清空 if(cop.count0) cTmp = cop.count; cop.pTmp = cop.head; /复制cop的头指针 注意:cop.pTmp 不可换做 pTmp ?否则运行报错 while(cTmp0) /当表中还有元素时 dataTmp = cop.pTmp-data; /取出后继结点中的数据 TailInsert(dataTmp); /生成新结点 cTmp -; /计数元素总数减一 cop.pTmp = cop.pTmp-next; /向后继结点移动一位 templatevoid LinkList:SUB(LinkList &A, LinkL

16、ist &B) Clear(); /对当前链表先清空 int countA=1, countB; ET elemA, elemB; DblNode* posA = A.head, * posB; while(countAdata; /依次获取A表中元素的数据部分 posA = posA-next; countA+; while(countBdata; posB = posB-next; if(elemA=elemB) break; /将A中的每一个元素分别与B中的每一个元素进行比较,若相同则中断本次循环 countB+; if(countBB.count) TailInsert(elemA);

17、 /若与B中所有元素均不相同时将该元素写入当前表中 templatevoid LinkList:ADD(LinkList &A, LinkList &B) Clear(); /对当前链表先清空 int countA=1, countB=1; DblNode* posA = A.head, * posB= B.head; while(countAdata); /依次获取A表中元素的数据部分,写入当前链表 posA = posA-next; countA+; while(countBdata); /依次获取B表中元素的数据部分 posB = posB-next; countB+; template

18、void LinkList:Seprate() /奇偶分离函数,使得所有奇数均排列在偶数前 int i=0, jb=0, jc=0; int *B = new intcount, *C = new intcount; /将链表中的元素按奇数、偶数分别存放到数组B、C中 DblNode* pos = head; ET tmp; while(i data; pos = pos-next; if(tmp%2 = 1) Bjb = tmp; jb+; /jb用于计数奇数的个数 else Cjc = tmp; jc+; /jc用于计数偶数的个数 i+; i = 0; pos = head; while(

19、i data = Bi; pos = pos-next; i+; i = 0; while(i data = Ci; pos = pos-next; i+; templatevoid LinkList:Sort() /对链表中的元素进行排序 int i=1, j; DblNode* posi = head, * posj; /初始时让posi指向第一个元素 ET tmp; while(i next; /初始时让posj指向第二个元素 while(j data posj-data) /若前面的元素大于后面的元素,则交换两元素的数据部分 tmp=posi-data; posi-data=posj-

20、data; posj-data=tmp; posj = posj-next; j+; posi = posi-next; i+; templatevoid LinkList:KillDouble() Sort(); /对链表中的元素进行排序 int i=1; DblNode* pos = head; /初始时让pos指向第一个元素 while(i data = pos-next-data) DelElem(i); /若第i个位置的元素和i+1个位置的元素数据部分相同时删除第i个元素 else i+; pos=pos-next; /否则指针指向下一个元素 templatevoid LinkLis

21、t:CinHelp() int choice=1, tmp; while(choice) coutendl请选择链表相关操作:endlendl1.添加新的元素 2.插入数据元素 3.删除表元素 4.修改元素 5.逆序输出表元素 endlendl6.链表清空 7.数据链表奇前偶后分离 8.数据链表元素排序 9.数据链表元素排序去重endlendlchoice; switch(choice) case 1: coutendltmp; choice = count; /链表中原有的元素数不应在计数范围内 coutendl请依次输入tmp个数据元素 空格间隔 Enter确认: endl; while(countdataTmp; TailInsert(dataTmp); Show(); break; case

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1