线性表的顺序储存及运算实现-------------顺序表

//线性表的顺序储存及运算实现-------------顺序表 #include //#include using namespace std; #define MAXSIZE 100 #define N 30 #define M 40 //若是其他的数据类型,直接修改这里就可以了 typedef int DataType ; / //顺序表的定义 typedef struct node { DataType data[MAXSIZE]; int length; //顺序表最后一个单元,表示数据长度 } SeqList ; //定义指针,实现信息的回送 typedef SeqList* PSeqList; / //顺序表基本运算的实现 //-------------------------------------------------------------------------------- //顺序表的初始化 PSeqList Init_SeqList() { //返回一个指向顺序表的指针,指针为NULL表示分配空间失败 PSeqList SeqListPoint=new SeqList; //若分配成功,设置空表,否则返回NULL if(SeqListPoint) { SeqListPoint->length=0; return SeqListPoint; } else { cout<<"分配空间失败!"<MAXSIZE) { cout<<"填充顺序表数据大于最大存放数据,无法完成填充!"<data[i]=dataArray[i]; } SeqListPoint->length=dataArraySize; return SeqListPoint; } else { cout<<"分配空间失败!"<length); } else { cout<<"表不存在!"<length==0) { cout<<"表中无元素!"<length;i++) { cout<data[i]<<" "; } cout<length;i++) { if(SeqListPoint->data[i]==dataX) { return (i+1); } } if(i==SeqListPoint->length) { cout<<"查找失败!"<MAXSIZE) { cout<<"插入位置不合法!"<length-1;j>=i-1;j--) { SeqListPoint->data[j+1]=SeqListPoint->data[j]; // 注意:一定不能是j++,而必须是j+1 } SeqListPoint->data[i-1]=dataX; SeqListPoint->length++; if(SeqListPoint->length>MAXSIZE) { cout<<"表满,溢出!"<SeqListPoint->length) { cout<<"删除位置不合法!"<length-1;j++) { SeqListPoint->data[j]=SeqListPoint->data[j+1]; // 注意:一定不能是j++,而必须是j+1 } SeqListPoint->length--; return 1; } //对顺序表数据元素降序排列 int SortDec_SeqList(PSeqList SeqListPoint) { //入口参数:顺序表指针,成功返回1,表不存在返回-1。 if(!SeqListPoint) { cout<<"表不存在!"<length-1;i++) { DataType Temp; DataType MAX=SeqListPoint->data[i]; int iMAX=i; for(int j=i+1;jlength;j++) { if(SeqListPoint->data[j]>MAX) { MAX=SeqListPoint->data[j]; iMAX=j; } } Temp=SeqListPoint->data[iMAX]; SeqListPoint->data[iMAX]=SeqListPoint->data[i]; SeqListPoint->data[i]=Temp; } return 1; } //对顺序表数据元素升序排列 int SortInc_SeqList(PSeqList SeqListPoint) { //入口参数:顺序表指针,成功返回1,表不存在返回-1。 if(!SeqListPoint) { cout<<"表不存在!"<length-1;i++) { DataType Temp; DataType MIN=SeqListPoint->data[i]; int iMIN=i; for(int j=i+1;jlength;j++) { if(SeqListPoint->data[j]data[j]; iMIN=j; } } Temp=SeqListPoint->data[iMIN]; SeqListPoint->data[iMIN]=SeqListPoint->data[i]; SeqListPoint->data[i]=Temp; } return 1; } / //顺序表应用举例 //------------------------------------------------------------------------------------------- // 1、 将一线性表逆置,有一线性表的顺序表示(a1,a2,a3,.....an),设计一算法将该线性表逆置为逆线性表(an,an-1,....a3,a2,a1),要求用 // 最小辅助空间 int Reverse_SeqList(PSeqList SeqListPoint) { //入口参数:一顺序表指针。返回值:1成功,-1表不存在,0为空表 if(!SeqListPoint) { cout<<"表不存在!"<length==0) { cout<<"为空表!"<length/2);i++) //注意不是length+1/2; { DataType Temp; Temp=SeqListPoint->data[i]; SeqListPoint->data[i]=SeqListPoint->data[SeqListPoint->length-1-i]; //注意是length-1-i SeqListPoint->data[SeqListPoint->length-i-1]=Temp; } return 1; } // 2. 有顺序表A和B,其元素均按从小到大升序排列,编写一算法将他们合并成一个表C,要求C的元素也是从小到大排列 int Merge_SeqList(PSeqList SeqListPointA,PSeqList SeqListPointB,PSeqList SeqListPointC) { //入口参数:顺序表A,B,C指针。返回值,-1A或B表不存在,-2C溢出,1成功 //算法思想:依次扫描AB,并比较它们的大小,将他们较小值赋值给C if(!SeqListPointA || !SeqListPointB) { cout<<"A或B表不存在!"<length+SeqListPointB->length>MAXSIZE) { cout<<"溢出!"<length-1&&j<=SeqListPointB->length-1) { if(SeqListPointA->data[i] < SeqListPointB->data[j]) { SeqListPointC->data[k++]=SeqListPointA->data[i++]; } else { SeqListPointC->data[k++]=SeqListPointB->data[j++]; } } //将余下的部分直接赋值给表C while(ilength) { SeqListPointC->data[k++]=SeqListPointA->data[i++]; } while(jlength) { SeqListPointC->data[k++]=SeqListPointB->data[j++]; } //k的值即为表长 SeqListPointC->length=k; return 1; } // 3. 约瑟夫问题:设由n个人围坐在一个圆桌周围,现从第S个人开始从1报数,数到m的人出列,然后从出来的下一个从新开始从1报数,数到m的人 //在出列。。。。。如此反复,直到所有的人都出列,求出出列的次序。 要求用顺序表求解。 //=========================================================================================================================

你可能感兴趣的:(数据结构)