数据结构线性表操作.docx
- 文档编号:27157984
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:9
- 大小:16.32KB
数据结构线性表操作.docx
《数据结构线性表操作.docx》由会员分享,可在线阅读,更多相关《数据结构线性表操作.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构线性表操作
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] 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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 线性 操作