数据结构作业1.docx
- 文档编号:30167510
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:20
- 大小:18.18KB
数据结构作业1.docx
《数据结构作业1.docx》由会员分享,可在线阅读,更多相关《数据结构作业1.docx(20页珍藏版)》请在冰豆网上搜索。
数据结构作业1
C
线性表
1.初始化线性表LInitList(L)
2.销毁线性表LDestoryList(L)
3.清空线性表LClearList(L)
4.求线性表L的长度ListLength(L)
5.判断线性表L是否为空IsEmpty(L)
6.获取线性表L中的某个数据元素内容GetElem(L,i,e)
7.检索值为e的数据元素LocateELem(L,e)
8.在线性表L中插入一个数据元素ListInsert(L,i,e)
9.删除线性表L中第i个数据元素ListDelete(L,i,e)
1.初始化线性表LInitList(L)
StatusInitList_Sq(SqList*L)//构造一个空的顺序表L
{
L->elem=newElemType[MAXSIZE];//为顺序表分配空间
if(!
L->elem)exit(OVERFLOW);//存储分配失败
L->length=0;//空表长度为0
returnOK;
}
2.销毁线性表LDestoryList(L)
voidDestroyList(SqList&L)
{
if(L.elem)delete[]L.elem;//释放存储空间
}
3.清空线性表LClearList(L)
voidClearList(SqList&L)
{
L.length=0;//将线性表的长度置为0
}
4.求线性表L的长度ListLength(L)
intGetLength(SqListL)
{
return(L.length);
}
5.判断线性表L是否为空IsEmpty(L)
intIsEmpty(SqListL)
{
if(L.length==0)return1;
elsereturn0;
}
6.获取线性表L中的某个数据元素内容GetElem(L,i,e)
//根据指定位置,获取相应位置数据元素的内容
intGetElem(SqListL,inti,ElemType&e)
{
if(i<1||i>L.length)returnERROR;
//判断i值是否合理,若不合理,返回ERROR
e=L.elem[i-1];//第i-1的单元存储着第i个数据
returnOK;
}
7.检索值为e的数据元素LocateELem(L,e)
intLocateELem(SqListL,ElemTypee)
{
for(i=0;i if(L.elem[i]==e)returni+1; return0; 8.在线性表L中插入一个数据元素ListInsert(L,i,e) StatusListInsert_Sq(SqList&L,inti,ElemTypee){ if(i<1||i>L.length+1)returnERROR;//i值不合法 if(L.length==MAXSIZE)returnERROR;//当前存储空间已满 for(j=L.length-1;j>=i-1;j--) L.elem[j+1]=L.elem[j];//插入位置及之后的元素后移 L.elem[i-1]=e;//将新元素e放入第i个位置 ++L.length;//表长增1 returnOK; } 9.删除线性表L中第i个数据元素ListDelete(L,i,e) StatusListDelete_Sq(SqList&L,inti,ElemType&e){ if((i<1)||(i>L.length))returnERROR;//i值不合法 e=L.elem[i-1];//将欲删除的元素保留在e中 for(j=i;j<=L.length-1;j++) L.elem[j-1]=L.elem[j];//被删除元素之后的元素前移 --L.length;//表长减1 returnOK; } 栈 顺序栈的表示 #defineMAXSIZE100 typedefstruct { SElemType*base; SElemType*top; intstacksize; }SqStack; 顺序栈初始化 StatusInitStack(SqStack&S) { S.base=newSElemType[MAXSIZE]; if(! S.base)returnOVERFLOW; S.top=S.base; S.stackSize=MAXSIZE; returnOK; } 判断顺序栈是否为空 boolStackEmpty(SqStackS) { if(S.top==S.base)returntrue; elsereturnfalse; } 求顺序栈的长度 intStackLength(SqStackS) { returnS.top–S.base; } 清空顺序栈 StatusClearStack(SqStackS) { if(S.base)S.top=S.base; returnOK; } 销毁顺序栈 StatusDestroyStack(SqStack&S) { if(S.base) { deleteS.base; S.stacksize=0; S.base=S.top=NULL; } returnOK; } 顺序栈进栈 StatusPush(SqStack&S,SElemTypee) { if(S.top-S.base==S.stacksize)//栈满 returnERROR; *S.top++=e; returnOK; } 顺序栈出栈 StatusPop(SqStack&S,SElemType&e) { if(S.top==S.base)//栈空 returnERROR; e=*--S.top; returnOK; } 取顺序栈栈顶元素 StatusGetTop(SqStackS,SElemType&e) { if(S.top==S.base)returnERROR;//栈空 e=*(S.top–1); returnOK; } C++ 线性表 1.初始化线性表L voidSequenList: : Initiate() { len=0; } 2.求线性表的长度: intLength() intLink: : Length() {intj; Item*p; j=1; p=head->next; while(p! =NULL) {j++; p=p->next; } return--j; } 3.取表元: DataTypeGet(inti) DataTypeLink: : Get(inti) {intj; Item*p; j=1; p=head->next; while((j =NULL)) { j++; p=p->next; } if((p==NULL)||(j>i)) { cout<<"positionisnotcorrect! "< returnNULL; } elsereturnp->data; } 栈 (1)判断栈是否为空 intSeqStack: : Empty_Stack()//判断顺序栈是否为空 { return((top<=base)); } (2)入栈操作 intSeqStack: : Push_Stack(DataTypee) {if(top-base {*top=e; top++; return1; } else return0; } (3)出栈操作 intSeqStack: : Pop_Stack(DataType&e){if(top>base)//判断栈是否为空 {top--; e=*top; return1; } else return0; } (4)取栈顶元素操作 intSeqStack: : GetTop_Stack(DataType&e){if(top>base)//判断栈是否为空 {e=*(top-1); return1; } else return0; } 4.按值查找: intLocate(DataTypex) intSequenList: : Locate(DataTypex) { //返回值为x的数据元素的位序值 intj=0; while((j =x))j++; if(j elsereturn0; } 5.插入操作: intInsert(DataTypex,inti) intSequenList: : Insert(DataTypex,inti) {//在线性表的第i个数据元素之前插入一个新的数据元素x intj; if(len>=MAXSIZE) {cout<<"overflow! "< return0; } elseif((i<1)||(i>len+1))//如果插入位置不合法 {cout<<"positionisnotcorrect! "< return0; } else {for(j=len;j>=i;j--) data[j]=data[j-1];//元素后移 data[i-1]=x;//插入元素 len++;//表长度增加1 return1; } } 6.删除操作: intDeleted(inti) intSequenList: : Deleted(inti)//删除顺序表的第i个数据元素 { intj; if((i<1)||(i>len))//若删除位置不合法 { cout<<"positionisnotcorrect! "< return0; } else { for(j=i;j data[j-1]=data[j];//元素前移 len--;//表长度减1 return1; } } JAVA 线性表 插入 publicclassLineList{ ... publicbooleaninsert(inti,inta){ intj; if(length>=data.length){//表空间已经满,不能插入 System.out.println("Thetableisoverflow."); returnfalse; } if(i<0||i>length){//插入位置是否正确 System.out.println("Thepositionismistake."+i); returnfalse; } for(j=length-1;j>=i;j--) data[j+1]=data[j]; data[i]=a; length++; returntrue; } } 删除 publicclassLineList{ ... publicbooleandelete(inti){ intj; if(i<0||i>=length){//检查删除位置是否存在 System.out.println("Thepositionismistake."); returnfalse; } for(j=i;j data[j]=data[j+1]; length--; returntrue; } } } 在链表的头部插入结点。 publicclassLinkNode{ privateintdata=-1; privateLinkNodenext=null; publicvoidsetData(intdata){ this.data=data; } publicvoidsetNext(LinkNodenext){ this.next=next; } publicintgetData(){ return(this.data); } publicLinkNodegetNext(){ return(this.next); } } publicclassLinkTable{ privateLinkNodehead=null; privateintcounts=0; publicvoidinsert(intd){ if(head==null){ head=newLinkNode(); } LinkNoden=newLinkNode();//定义新的链表结点,并将数据赋给新结点 n.setData(d); if(head.getNext()==null){//如果头结点的后继无结点,注意头结点中无数据 head.setNext(n); } else{ n.setNext(head.getNext());//如果头结点的后继结点存在 head.setNext(n); } counts++;//结点总数增加 } publicvoidprint(){ LinkNoden=head.getNext(); intiCounter=1; while(n! =null){ System.out.print(n.getData()+""); n=n.getNext(); iCounter++; } } publicintsize(){ returnthis.counts; } publicstaticvoidmain(String[]args){ LinkTablelinkTable=newLinkTable(); linkTable.insert(30); linkTable.insert(23); linkTable.insert(12); linkTable.insert(50); linkTable.insert(36); linkTable.insert(77); linkTable.insert(37); linkTable.print(); } } 顺序表的连接 publicclassCombinate{ voidmerge(int[]a,int[]b){ inti,j,k; i=0;j=0;k=0; intalength=a.length; intblength=b.length; intclength=alength+blength; int[]c=newint[clength]; while(i if(a[i] c[k++]=a[i++]; else c[k++]=b[j++]; while(i c[k++]=a[i++]; while(j c[k++]=b[j++]; System.out.println(); System.out.print("排序好的是: "); for(intl=0;l System.out.print(""+c[l]); } publicstaticvoidmain(String[]args){ Combinatea1=newCombinate(); int[]a={2,5,7}; int[]b={3,4,8,9}; System.out.print("a数组: "); for(inti=0;i System.out.print(""+a[i]); System.out.println(); System.out.print("b数组: "); for(intj=0;j System.out.print(""+b[j]); a1.merge(a,b); } } 单链表的逆转 classLinkCharNode{ privatechardata='\0'; privateLinkCharNodenext=null; publicvoidsetData(chardata){ this.data=data; } publicvoidsetNext(LinkCharNodenext){ this.next=next; }publicchargetData(){ return(this.data); } publicLinkCharNodegetNext(){ return(this.next); } } publicclassLinkCharTable{ privateLinkCharNodehead=null; privateintcounts=0; publicLinkCharNodegetHead(){ returnhead; } publicvoidinsert(chard){ if(head==null){ head=newLinkCharNode(); } LinkCharNoden=newLinkCharNode();//定义新的链表结点,并将数据赋给新结点 n.setData(d); if(head.getNext()==null){//如果头结点的后继无结点,注意头结点中无数据 head.setNext(n); } else{ n.setNext(head.getNext());//如果头结点的后继结点存在 head.setNext(n); } counts++;//结点总数增加 }publicvoiddelete(chard){ if(head==null){ System.out.println("链表中无数据! "); return; } LinkCharNodep=head; LinkCharNoden=head.getNext(); while(n! =null){ if(n.getData()==d){ p.setNext(n.getNext()); } p=n; n=n.getNext(); } } publicvoidprint(){ LinkCharNoden=head.getNext(); intiCounter=1;//输出的字符个数 while(n! =null){ System.out.print(n.getData()+""); n=n.getNext(); iCounter++; } System.out.println(); } publicintsize(){ returnthis.counts; } } publicclassCombinate{ publicCombinate(){ } publicstaticvoidmain(String[]args){ LinkCharTablelinkTable=newLinkCharTable(); linkTable.insert('Y'); linkTable.insert('D'); linkTable.insert('U'); linkTable.insert('T'); linkTable.insert('S'); linkTable.print(); reverse(linkTable); linkTable.print(); } publicstaticvoidreverse(LinkCharTablelct){ LinkCharNoden=lct.getHead().getNext(); while(n! =null) { charch=n.getData(); lct.delete(ch); lct.insert(ch); n=n.getNext(); } } } 栈 定义链栈类 classStackNode{ Stringdata; StackNodenext; } 判断栈是否为空: booleanempty(){ returntop==null; } 入栈 StackNodepush(StackNodeS){ S.next=top; top=S; returntop; } 出栈 StackNodepop(){ if(empty()){ System.out.println("Stackundedow."); } StackNodesn=top; top=top.next; returnsn; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 作业