《数据结构线性表操作.pdf》由会员分享,可在线阅读,更多相关《数据结构线性表操作.pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-1.这是 p1list.h 自定义的头文件/-Head files for list in chapter 2-#include#include#include/预定义常量#define TRUE1#define FALSE0#define OK1#define ERROR0#define INFEASIBLE-1#define OVERFLOW-2#define GUARD-99#define MAXLEN 255/线性表(顺序表)的最大长度#define LIST_MAX_SIZE 50/链表的最大长度/函数结果的类型typedef int Status;typedef int Elem
2、Type;typedef struct ElemType*elem;int length;int listsize;SqList;typedef struct List int elemMAXLEN;int length;List;typedef unsigned char SStringMAXLEN+1;typedef int ElemType;typedef struct LNode int data;struct LNode*next;LNode,*LinkList;-.可修编-/-p1list.cpp-void InitList(List&L);/*此函数用于初始化一个保持增序的线性表
3、Lvoid InitList0(List&L);/*此函数用于初始化一个线性表Lvoid printList(List L);void createTwoLists(List&La,List&Lb);void MergeList(List La,List Lb,List&Lc);/*TBD1*将 Lb 归并到 La 表,形成新表 Lcvoid Union(List&La,List Lb);/*TBD2*线性La和 Lb分别表示两个集合,求新集合LaLa U Lb(U并操作)void ReverseList(List&L);/*TBD3*将线性表 L 逆转void deleteall(List&
4、L,int x,int y);/*TBD4*从一给定的顺序表 L 中删除元素值在x 和 y 之间的所有元素(x=y)/-lottery.cpp-void build(LinkList&L,int size);/*TBD1*乙负责-初始化循环链表 Lvoid display(LinkList L);/*TBD1*甲负责-在屏幕上输出链表 L 的容void select10(LinkList&L);/*TBD2*乙负责-实现体育彩票(10 选 7)void select36(LinkList&L);/*TBD2*甲负责-实现体育彩票(36 选 7)void freeList(LinkList&L)
5、;/*TBD3*甲负责-释放初始化链表 L 所使用的存void mainlottery();/*TBD3*乙负责-实现主函数/-LinkedList.cpp-Status CreateList_L(LinkList&L,int n);/采用尾插法创建一个带头结点的长度为n 的单链表 LStatus CreateList_L_NoHead(LinkList&L,int n);/采用尾插法创建一个无头结点的长度为n的单链表 Lvoid printList_L(LinkList L);/输出带头结点的单链表 Lvoid printList_L_NoHead(LinkList L);/输出不带头结点的
6、单链表LStatus GetElem_L(LinkList L,int i,ElemType&e);Status ListInsert_L(LinkList&L,int i,ElemType e);Status ListDelete_L(LinkList&L,int i,ElemType&e);void MergeList_L(LinkList&La,LinkList&Lb,LinkList&Lc);void deleteallnodes(LinkList&L,ElemType min,ElemType max);void ChangeLinkList01J(LinkList&L);Statu
7、s reorder5(LinkList&L);/-p1list.cpp 例 2-2-12-void deleteall_1(List*L,int x);void deleteall_2(List*L,int x);void deleteall_3(List*L,int x);2.这是线性表操作代码:/实验一:设计一个程序实现线性表上并操作。-.可修编-/e1list.cpp:定义控制台应用程序的入口点。/#include p1list.h/*此函数用于初始化一个保持增序的线性表L*L 的初值是通过键盘按照递增的次序一个自然数一个自然数输入的。*/void InitList(List&L)/增序
8、的;int i=0,d;L.elem0=GUARD;/-99printf(n 输入某线性表各个元素的值(自然数),%d 表示输入结束!n,GUARD);do scanf(%d,&d);if(d!=GUARD)if(i!=0&d L.elemi-1)printf(n 这里要初始化一个保持增序的线性表,请输入一个不小于的%d自然数,L.elemi-1);else L.elemi+=d;if(i=MAXLEN)printf(n 该线性表长度达到最大值n);while(d!=GUARD)&(iMAXLEN);L.length=i;/个数,-99 没有保存;/*此函数用于初始化一个线性表L*L 的初值是
9、通过键盘一个自然数一个自然数输入的。*/void InitList0(List&L)int i=0,d;L.elem0=GUARD;printf(输入某线性表各个元素的值(自然数),%d 表示输入结束!n,GUARD);do scanf(%d,&d);if(d!=GUARD)L.elemi+=d;if(i=MAXLEN)printf(n 该线性表长度达到最大值n);while(d!=GUARD)&(iMAXLEN);L.length=i;void printList(List L)int i;printf(线性表%d:n,L.length);for(i=0;i MAXLEN)Lb.length
10、=MAXLEN-La.length;/*TBD1*将 Lb 归并到 La 表,形成新表 Lc*TBD1*要求 L0.c 保持有序,允许出现重复元素*TBD1*/void MergeList(List La,List Lb,List&Lc)int i=0,j=0,m=0;while(iLa.length&j=Lb.elemj)Lc.elemm+=Lb.elemj+;else Lc.elemm+=La.elemi+;while(iLa.length)/有剩余Lc.elemm+=La.elemi+;while(jLb.length)Lc.elemm+=Lb.elemj+;Lc.length=La.l
11、ength+Lb.length;/*TBD2*线性 La 和 Lb 分别表示两个集合,求新集合LaLa U Lb(U并操作)*TBD2*注意集合里不允许出现重复元素*TBD2*/void Union(List&La,List Lb)int i=0,j=0,t,m=La.length;t=m;while(iLa.length&jLb.length)if(La.elemi=i+1)La.elemt=La.elemt-1;t-;La.elemi+=Lb.elemj+;t=+La.length;while(jLb.length)/Lb 还没有到头La.elemi+=Lb.elemj+;La.lengt
12、h=i;/*TBD3*将线性表 L 逆转*TBD3*要求使用最少的附加空间,空间复杂度为O(1)。*TBD3*/void ReverseList(List&L)int j,i,n,c;j=L.length-1;n=L.length/2;/取半;for(i=0;in;i+)c=L.elemi;L.elemi=L.elemj;L.elemj-=c;/*TBD4*从一给定的顺序表 L 中删除元素值在 x 和 y 之间的所有元素(x=y)*TBD4*要求以较高的效率实现,空间复杂度为O(1)。*TBD4*/void deleteall(List&L,int x,int y)int i=0,n=0;fo
13、r(;iL.length;i+)if(L.elemiy)/机智啊把对的重新放一遍;L.elemn+=L.elemi;L.length=n;int main(int argc,char*argv)List La,Lb,Lc;int x,y,n,h;int j;-.可修编-while(1)printf(n1-创建数组 La,Lb,2-合并数组 La,Lb 到 Lc,含重复元素 3-归并 Lb 到La,不重复n);printf(4-逆转数组,5-删除数组中 x-y 之间的值 6-遍历 La,7-遍历 Lb,n);printf(输入大于 7 的数退出n);scanf(%d,&h);/system(cl
14、s);/盖住啦。switch(h)case 1:createTwoLists(La,Lb);break;case 2:MergeList(La,Lb,Lc);printList(Lc);break;case 3:Union(La,Lb);printList(La);break;case 4:printf(逆转数组 1-La 或 2-Lb);scanf(%d,&j);if(j=1)ReverseList(La);printList(La);elseReverseList(Lb);printList(Lb);break;case 5:printf(输入 x,y,顺序表 L 中删除元素值在 x 和 y 之间的所有元素(x7)break;/mainlottery();printf(n 键入任意字符程序退出.);getchar();return 0;-.可修编-