头文件: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,出列数为m
int 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;
}