数据结构 矩阵操作文档格式.docx

上传人:b****3 文档编号:17885430 上传时间:2022-12-11 格式:DOCX 页数:33 大小:33.58KB
下载 相关 举报
数据结构 矩阵操作文档格式.docx_第1页
第1页 / 共33页
数据结构 矩阵操作文档格式.docx_第2页
第2页 / 共33页
数据结构 矩阵操作文档格式.docx_第3页
第3页 / 共33页
数据结构 矩阵操作文档格式.docx_第4页
第4页 / 共33页
数据结构 矩阵操作文档格式.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

数据结构 矩阵操作文档格式.docx

《数据结构 矩阵操作文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构 矩阵操作文档格式.docx(33页珍藏版)》请在冰豆网上搜索。

数据结构 矩阵操作文档格式.docx

head=tail=pTmp=NULL;

}

//链表构造函数

~LinkList(){Clear();

}//链表析构函数

//链表相关操作

intLength(){returncount;

}//用于获取当前标的长度

voidClear(){while(count)DelHead();

}//表清空

voidShow();

//输出表中现有的所有元素

voidReShow();

//逆序输出表中现有的所有元素

*GetPosP(intpostion);

//获取指向第postion个位置结点的指针

voidHeadInsert(ET&

e);

//从表头插入元素

voidTailInsert(ET&

//从表尾插入元素

voidInsert(intposition,ET&

//向表中第postion个位置插入新的结点元素,元素总数加一

voidReTailInsert(intposition,ET&

//重置表中第cTmp个位置元素的数据部分为e,元素总数不变

voidGetElem(intposition,ET&

//从表中获取第cTmp元素,写入e中,由e输出

voidDelHead();

//删除表头

voidDelTail();

//删除表尾

voidDelElem(intposition);

//删除表中第cTmp个位置的元素.元素减一

voidoperator=(LinkList<

&

cop);

//赋值符重载函数,实现链表的复制功能

voidSUB(LinkList<

&

A,LinkList<

B);

//实现链表相减,将仅存在于A中的元素写入当前链表

voidADD(LinkList<

//实现链表相加,将表A表B中的元素依次写入当前链表

voidSeprate();

//奇偶分离函数,使得所有奇数均排列在偶数前

voidSort();

//对链表中的元素进行排序

voidKillDouble();

//对链表中的元素进行排序去重

voidCinHelp();

//提示输入函数,用于实现键盘输入交互式操作

voidLinkList<

:

Show()

{

cTmp=count;

pTmp=head;

//指向头指针的第一个后继

cout<

<

endl<

"

当前链表中共有"

count<

个元素,"

依次为:

"

;

while(cTmp>

0&

count>

0)//当表中有元素时

{

dataTmp=pTmp->

data;

cout<

dataTmp<

//将后继的数据部分逐一输出

cTmp--;

//计数元素总数减一

pTmp=pTmp->

next;

//每输出一位向后移动一位

}

endl;

ReShow()

pTmp=tail;

back;

DblNode<

*LinkList<

GetPosP(intpostion)

cTmp=postion;

if(cTmp<

1)cout<

操作无效!

请确保输入元素位置大于0"

else

if(cTmp==1)returnhead;

if(cTmp>

count){cTmp=cTmp%count;

if(cTmp==0)cTmp=count;

//当输入位置大于元素总数时取余数得对应位置

if(cTmp<

=count/2+1)//前count/2用next指针访问

{

pTmp=head;

//不断指向下一个结点,头指针所在位置为1

while(cTmp>

1){pTmp=pTmp->

cTmp--;

}

else

{//后count/2用back指针访问

cTmp=count-cTmp+1;

pTmp=tail;

//不断指向下一个结点,头指针所在位置为零

}

returnpTmp;

ReTailInsert(intposition,ET&

e)

cTmp=position;

if(count==0)cout<

表当前为空,无元素可修改"

elseGetPosP(cTmp)->

data=e;

//重置表中元素,元素总数不变

HeadInsert(ET&

if(count==0)//向表中插入第一个结点元素

{

head=newDblNode<

tail=pTmp=head;

head->

count++;

back=newDblNode<

back->

next=head;

head=head->

TailInsert(ET&

tail=newDblNode<

head=pTmp=tail;

tail->

next=newDblNode<

pTmp=tail->

pTmp->

back=tail;

tail=pTmp;

Insert(intposition,ET&

{//在第pos个位置插入一个新结点

intpos=position;

//因为此成员函数调用了获取指针位置函数GetPosP(),而该函数使用了cTmp计数区间,故需使用其他空间计数

if(pos<

if(count==0)HeadInsert(e);

//当元素总数为0时

else

if(pos>

count)//当输入位置大于元素总数时

if(pos%count==1)pos=count+1;

//输入位置大于元素总数且取余后为1,将pos置为插入尾部

elseif(pos%count==0)pos=count;

elsepos=pos%count;

if(pos==1)HeadInsert(e);

elseif(pos==count+1)TailInsert(e);

else

pTmp=GetPosP(pos-1);

//获取指向第pos-1个结点的指针

DblNode<

*posNext=pTmp->

//获取指向第pos个结点的指针

pTmp->

//在pos-1后生成新结点

next->

back=pTmp;

//新结点前驱为第pos-1个结点

next=posNext;

//新结点后继为原pos个结点

posNext->

back=pTmp->

//原pos个位置的结点前驱指向新结点

count++;

GetElem(intposition,ET&

elsee=GetPosP(cTmp)->

//获取指向第cTmp个结点的数据部分

DelHead()

操作无效!

当前表已为空"

pTmp=head->

deletehead;

head=pTmp;

count--;

DelTail()

deletetail;

DelElem(intpositon)

{//删除在第cTmp个位置的结点

cTmp=positon;

if(cTmp>

count)cTmp=cTmp%count;

elseif(count==1||cTmp==1)DelHead();

elseif(cTmp==count)DelTail();

pTmp=GetPosP(cTmp-1);

//获取指向第cTmp-1个结点的指针

*pNext=pTmp->

//获取指向第cTmp个结点的指针

next=pNext->

//将第cTmp-1个结点的后继指向第cTmp个结点的后继

pNext->

//将第cTmp+1个结点的前驱指向第cTmp-1个结点

deletepNext;

//将第cTmp个结点删除

//表元素元素总数减一

operator=(LinkList<

cop)

{//赋值符“=”重载

Clear();

//对当前链表先清空

if(cop.count>

0)

cTmp=cop.count;

cop.pTmp=cop.head;

//复制cop的头指针注意:

cop.pTmp不可换做pTmp?

否则运行报错

while(cTmp>

0)//当表中还有元素时

dataTmp=cop.pTmp->

//取出后继结点中的数据

TailInsert(dataTmp);

//生成新结点

cTmp--;

//计数元素总数减一

cop.pTmp=cop.pTmp->

//向后继结点移动一位

SUB(LinkList<

B)

//对当前链表先清空

intcountA=1,countB;

ETelemA,elemB;

*posA=A.head,*posB;

while(countA<

=A.count)//当表A中还有元素时

countB=1;

posB=B.head;

//从B表表头开始比对

elemA=posA->

//依次获取A表中元素的数据部分

posA=posA->

countA++;

while(countB<

=B.count)//当表B中还有元素时

elemB=posB->

posB=posB->

if(elemA==elemB)break;

//将A中的每一个元素分别与B中的每一个元素进行比较,若相同则中断本次循环

countB++;

if(countB>

B.count)TailInsert(elemA);

//若与B中所有元素均不相同时将该元素写入当前表中

ADD(LinkList<

intcountA=1,countB=1;

*posA=A.head,*posB=B.head;

TailInsert(posA->

data);

//依次获取A表中元素的数据部分,写入当前链表

while(countB<

=B.count)//当表B中还有元素时

TailInsert(posB->

//依次获取B表中元素的数据部分

posB=posB->

countB++;

Seprate()//奇偶分离函数,使得所有奇数均排列在偶数前

inti=0,jb=0,jc=0;

int*B=newint[count],*C=newint[count];

//将链表中的元素按奇数、偶数分别存放到数组B、C中

*pos=head;

ETtmp;

while(i<

count)

tmp=pos->

pos=pos->

if(tmp%2==1){B[jb]=tmp;

jb++;

}//jb用于计数奇数的个数

else{C[jc]=tmp;

jc++;

}//jc用于计数偶数的个数

i++;

i=0;

pos=head;

jb)//将奇数依次存回到链表中

pos->

data=B[i];

jc)//将偶数依次存回到链表中奇数之后

data=C[i];

Sort()//对链表中的元素进行排序

inti=1,j;

*posi=head,*posj;

//初始时让posi指向第一个元素

=count-1)//i循环至count-1

j=i+1;

posj=posi->

//初始时让posj指向第二个元素

while(j<

=count)//j循环至count

if(posi->

data>

posj->

data)//若前面的元素大于后面的元素,则交换两元素的数据部分

{tmp=posi->

posi->

data=posj->

data=tmp;

posj=posj->

j++;

posi=posi->

KillDouble()

Sort();

//对链表中的元素进行排序

inti=1;

//初始时让pos指向第一个元素

count)//i循环至count-1

if(pos->

data==pos->

data){DelElem(i);

//若第i个位置的元素和i+1个位置的元素数据部分相同时删除第i个元素

else{i++;

pos=pos->

}//否则指针指向下一个元素

CinHelp()

intchoice=1,tmp;

while(choice)

请选择链表相关操作:

1.添加新的元素2.插入数据元素3.删除表元素4.修改元素5.逆序输出表元素"

6.链表清空7.数据链表奇前偶后分离8.数据链表元素排序9.数据链表元素排序去重"

选择并以Enter确认:

cin>

>

choice;

switch(choice)

case1:

cout<

请输入要输入的表元素个数Enter确认:

cin>

tmp;

choice=count;

//链表中原有的元素数不应在计数范围内

请依次输入"

tmp<

个数据元素空格间隔Enter确认:

while(count<

tmp+choice){cin>

dataTmp;

TailInsert(dataTmp);

Show();

break;

case

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 辩护词

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

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