1.3顺序表

来源:互联网 发布:windows编程书籍 编辑:程序博客网 时间:2024/05/19 22:44

头文件:node.h

#include<iostream>using namespace std;#define MAXSIZE 100//顺序表类型typedef struct node{int data[MAXSIZE];    int length;}SeqList,*PSeqList;//顺序表初始化PSeqList Init_SepList(void){//创建一顺序表,入口参数无PSeqList PL;PL=(PSeqList)malloc(sizeof(SeqList));if(PL)PL->length=0;return PL;}//求顺序表的长度int Length_SeqList(SeqList L){return L.length;}//顺序表的检索操作int Location_SeqList(PSeqList L,int x){int i=0;while(i<L->length&&L->data[i]!=x)    i++;if(i>=L->length)  return 0;//查找失败else return (i+1);}//顺序表的插入操作int Insert_SeqList(PSeqList PL,int i,int x){//在顺序表的第i个元素之前插入x;int j;if(!PL){cout<<"表不存在!";return (-2);}if(PL->length>=MAXSIZE){cout<<"表溢出!";return (-1);}if(i<1||i>PL->length+1){cout<<"插入位置不合法!";return 0;}for(j=PL->length-1;j>=i-1;j--)PL->data[j+1]=PL->data[j];PL->data[i-1]=x;PL->length++;return 1;    // 插入成功}//顺序表的删除操作int Delete_SeqList(PSeqList PL,int i){//删除顺序表第i个元素int j;if(!PL){cout<<"表不存在!";return (-2);}if(PL->length>=MAXSIZE){cout<<"表溢出!";return (-1);}if(i<1||i>PL->length){cout<<"删除位置不合法!";return 0;}    for(j=i;j<PL->length;j++)PL->data[j-1]=PL->data[j];PL->length--;return 1;    // 删除成功}


josephus.cpp:

#include<iostream>#include"node.h"using namespace std;/*共n个人,第s个人从1数到m,数到m的人出列,然后从出列的下一个人重新开始从1 报数*/int josephus_SeqList(PSeqList josephus_seq,int s,int m){//起始位置为s,出列数为mint s1,i,w;if(!josephus_seq->length){cout<<"表中无元素!";return 0;}s1=s-1;//数组中下标从0 开始cout<<"输出约瑟夫序列:";    for(i=josephus_seq->length;i>0;i--){s1=(s1+m-1)%i;  //出列元素下标w=josephus_seq->data[s1];cout<<w<<"\t";Delete_SeqList(josephus_seq,s1+1);}return 1;//成功返回}int main(){PSeqList PL=Init_SepList();//定义一个指针变量,并初始化for(int i=0;i<10;i++){Insert_SeqList(PL,i+1,i);cout<<PL->data[i]<<" ";}cout<<endl;    josephus_SeqList(PL,1,2);return 0; }


集合的操作:

#include<iostream>#include"node.h"using namespace std;void Inter_sec(PSeqList A,PSeqList B){//求集合A,B的交集int i;for(i=0;i<A->length;i++){if(!Location_SeqList(B,A->data[i]))//如果B中没有找到Delete_SeqList(A,i+1);//删除A中的第i+1个元素,i从0开始}}void Merge_sec(PSeqList A,PSeqList B){//求集合A,B的并集int i;for(i=0;i<B->length;i++){if(!Location_SeqList(A,B->data[i]))//如果A中没有找到Insert_SeqList(A,A->length+1,B->data[i]);//插入到A中}}int main(){PSeqList A=Init_SepList();PSeqList B=Init_SepList();int i;cout<<"A:"<<endl;for(i=3;i<=15;i+=3){Insert_SeqList(A,i/3,i);cout<<A->data[i/3-1]<<" ";}cout<<endl<<"B:"<<endl;for(i=6;i<=30;i+=6){Insert_SeqList(B,i/6,i);cout<<B->data[i/6-1]<<" ";}cout<<endl;Inter_sec(A,B);//交集cout<<"A∩B=";//Merge_sec(A,B);并集(不能共存,集合A改变)//cout<<endl<<"A∪B=";    for(i=0;i<A->length;i++){cout<<A->data[i]<<" ";}return 0;}


 

0 0