数据结构线性表操作.docx

上传人:b****4 文档编号:27157984 上传时间:2023-06-27 格式:DOCX 页数:9 大小:16.32KB
下载 相关 举报
数据结构线性表操作.docx_第1页
第1页 / 共9页
数据结构线性表操作.docx_第2页
第2页 / 共9页
数据结构线性表操作.docx_第3页
第3页 / 共9页
数据结构线性表操作.docx_第4页
第4页 / 共9页
数据结构线性表操作.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

数据结构线性表操作.docx

《数据结构线性表操作.docx》由会员分享,可在线阅读,更多相关《数据结构线性表操作.docx(9页珍藏版)》请在冰豆网上搜索。

数据结构线性表操作.docx

数据结构线性表操作

1.这是p1list.h自定义的头文件

//------Headfilesforlistinchapter2--------------

#include

#include

#include

//预定义常量

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

#defineGUARD-99

#defineMAXLEN255//线性表(顺序表)的最大长度

#defineLIST_MAX_SIZE50//链表的最大长度

//函数结果的类型

typedefintStatus;

typedefintElemType;

typedefstruct{

ElemType*elem;

intlength;

intlistsize;

}SqList;

typedefstructList{

intelem[MAXLEN];

intlength;

}List;

typedefunsignedcharSString[MAXLEN+1];

typedefintElemType;

typedefstructLNode{

intdata;

structLNode*next;

}LNode,*LinkList;

//----------p1list.cpp---------------------------------------------

voidInitList(List&L);//*此函数用于初始化一个保持增序的线性表L

voidInitList0(List&L);//*此函数用于初始化一个线性表L

voidprintList(ListL);

voidcreateTwoLists(List&La,List&Lb);

voidMergeList(ListLa,ListLb,List&Lc);//*TBD1*将Lb归并到La表,形成新表Lc

voidUnion(List&La,ListLb);//*TBD2*线性La和Lb分别表示两个集合,求新集合La=LaULb(U"并"操作)

voidReverseList(List&L);//*TBD3*将线性表L逆转

voiddeleteall(List&L,intx,inty);//*TBD4*从一给定的顺序表L中删除元素值在x和y之间的所有元素(x<=y)

//---------lottery.cpp----------------------------------------------

voidbuild(LinkList&L,intsize);//*TBD1*乙负责-初始化循环链表L

voiddisplay(LinkListL);//*TBD1*甲负责-在屏幕上输出链表L的内容

voidselect10(LinkList&L);//*TBD2*乙负责-实现体育彩票(10选7)

voidselect36(LinkList&L);//*TBD2*甲负责-实现体育彩票(36选7)

voidfreeList(LinkList&L);//*TBD3*甲负责-释放初始化链表L所使用的内存

voidmainlottery();//*TBD3*乙负责-实现主函数

//---------LinkedList.cpp--------------------------------------------

StatusCreateList_L(LinkList&L,intn);//采用尾插法创建一个带头结点的长度为n的单链表L

StatusCreateList_L_NoHead(LinkList&L,intn);//采用尾插法创建一个无头结点的长度为n的单链表L

voidprintList_L(LinkListL);//输出带头结点的单链表L

voidprintList_L_NoHead(LinkListL);//输出不带头结点的单链表L

StatusGetElem_L(LinkListL,inti,ElemType&e);

StatusListInsert_L(LinkList&L,inti,ElemTypee);

StatusListDelete_L(LinkList&L,inti,ElemType&e);

voidMergeList_L(LinkList&La,LinkList&Lb,LinkList&Lc);

voiddeleteallnodes(LinkList&L,ElemTypemin,ElemTypemax);

voidChangeLinkList01J(LinkList&L);

Statusreorder5(LinkList&L);

//---------p1list.cpp[例2-2-12]-----------------------------------

voiddeleteall_1(List*L,intx);

voiddeleteall_2(List*L,intx);

voiddeleteall_3(List*L,intx);

 

2.这是线性表操作代码:

//实验一:

设计一个程序实现线性表上并操作。

//e1list.cpp:

定义控制台应用程序的入口点。

//

#include"p1list.h"

/*此函数用于初始化一个保持增序的线性表L

*L的初值是通过键盘按照递增的次序一个自然数一个自然数输入的。

*/

voidInitList(List&L){//增序的;

inti=0,d;

L.elem[0]=GUARD;//-99

printf("\n输入某线性表各个元素的值(自然数),%d表示输入结束!

\n",GUARD);

do{

scanf("%d",&d);

if(d!

=GUARD){

if(i!

=0&&d

printf("\n这里要初始化一个保持增序的线性表,请输入一个不小于的%d自然数",L.elem[i-1]);

elseL.elem[i++]=d;

}

if(i==MAXLEN)printf("\n该线性表长度达到最大值\n");

}while((d!

=GUARD)&&(i

L.length=i;//个数,-99没有保存;

}

/*此函数用于初始化一个线性表L

*L的初值是通过键盘一个自然数一个自然数输入的。

*/

voidInitList0(List&L){

inti=0,d;

L.elem[0]=GUARD;

printf("输入某线性表各个元素的值(自然数),%d表示输入结束!

\n",GUARD);

do{

scanf("%d",&d);

if(d!

=GUARD)L.elem[i++]=d;

if(i==MAXLEN)printf("\n该线性表长度达到最大值\n");

}while((d!

=GUARD)&&(i

L.length=i;

}

voidprintList(ListL){

inti;

printf("线性表[%d]:

\n",L.length);

for(i=0;i

printf("\n");

}

voidcreateTwoLists(List&La,List&Lb){

printf("\n创建两个线性表--注意输入的两表的总长度不要超过%d\n",MAXLEN);

InitList(La);//增序的

printf("\n初始化线性表Lb,其长度不超过%d。

超出部分被截断!

\n",MAXLEN-La.length);

InitList(Lb);

if(La.length+Lb.length>MAXLEN)Lb.length=MAXLEN-La.length;//

}

 

/*TBD1*将Lb归并到La表,形成新表Lc

*TBD1*要求L0.c保持有序,允许出现重复元素

*TB

D1*/

voidMergeList(ListLa,ListLb,List&Lc){

inti=0,j=0,m=0;

while(i

if(La.elem[i]>=Lb.elem[j])

Lc.elem[m++]=Lb.elem[j++];

elseLc.elem[m++]=La.elem[i++];

}

while(i

Lc.elem[m++]=La.elem[i++];

while(j

Lc.elem[m++]=Lb.elem[j++];

Lc.length=La.length+Lb.length;

}

/*TBD2*线性La和Lb分别表示两个集合,求新集合La=LaULb(U"并"操作)

*TBD2*注意集合里不允许出现重复元素

*TBD2*/

voidUnion(List&La,ListLb){

inti=0,j=0,t,m=La.length;t=m;

while(i

if(La.elem[i]

i++;

}

elseif(La.elem[i]==Lb.elem[j]){

i++;j++;

}

else{

while(t>=i+1){

La.elem[t]=La.elem[t-1];

t--;

}

La.elem[i++]=Lb.elem[j++];

t=++La.length;

}

}

while(j

La.elem[i++]=Lb.elem[j++];

La.length=i;

}

/*TBD3*将线性表L逆转

*TBD3*要求使用最少的附加空间,空间复杂度为O

(1)。

*TBD3*/

voidReverseList(List&L){

intj,i,n,c;

j=L.length-1;

n=L.length/2;//取半;

for(i=0;i

c=L.elem[i];

L.elem[i]=L.elem[j];

L.elem[j--]=c;

}

}

/*TBD4*从一给定的顺序表L中删除元素值在x和y之间的所有元素(x<=y)

*TBD4*要求以较高的效率实现,空间复杂度为O

(1)。

*TBD4*/

voiddeleteall(List&L,intx,inty){

inti=0,n=0;

for(;i

if(L.elem[i]y)//机智啊把对的重新放一遍;

L.elem[n++]=L.elem[i];

}

L.length=n;

}

intmain(intargc,char*argv[])

{

ListLa,Lb,Lc;

intx,y,n,h;

intj;

while

(1){printf("\n1-创建数组La,Lb,2-合并数组La,Lb到Lc,含重复元素3-归并Lb到La,不重复\n");

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

当前位置:首页 > PPT模板 > 其它模板

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

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