1.2静态链表

#include<iostream>
#define MAXSIZE 100
using namespace std;
typedef struct 
{
	int x;
	int next;
}SNode;

typedef struct 
{
	SNode sp[MAXSIZE];
	int SL;
}StList,*PStList;


//静态链表初始化
PStList Creat_StList(void)
{
	//创建一静态链表,入口参数无
	PStList PL;
	PL=(PStList)malloc(sizeof(StList));
	if(PL)
	{
		PL->SL=-1;
	    //PL->sp[0].next=-1;
	}
	return PL;
}
//求静态链表的长度
int Length_StList(StList L)
{
	return L.SL+1;
}
//静态链表的检索操作
int Location_StList(StList L,int x)
{
	int i=0;
	while(i<L.SL&&L.sp[i].x!=x)
	    i++;
	if(i>=L.SL)  return 0;//查找失败
	else return (i+1);
}
//静态链表的插入操作
int Insert_StList(PStList PL,int x)
{
	//在静态链表的((第i个元素之前))插入x//;
	if(!PL)
	{
		cout<<"表不存在!";
		return (-2);
	}
	if(PL->SL>=MAXSIZE)
	{
		cout<<"表溢出!";
		return (-1);
	}
	/*if(i<1||i>PL->SL+1)
	{
		cout<<"插入位置不合法!";
		return 0;
	}*/
    PL->sp[PL->SL+1].x=x;
	PL->sp[PL->SL+1].next=-1;

	if(PL->SL>=0)
        PL->sp[PL->SL].next=PL->SL+1;
	PL->SL++;
	return 1;    // 插入成功
}
//静态链表的删除操作
int Delete_StList(PStList PL,int i)
{
	//删除静态链表第i个元素
    int j,k;
	if(!PL)
	{
		cout<<"表不存在!";
		return (-2);
	}
	if(PL->SL>=MAXSIZE)
	{
		cout<<"表溢出!";
		return (-1);
	}
	if(i<1||i>PL->SL)
	{
		cout<<"删除位置不合法!";
		return 0;
	}
	k=PL->sp[0].next;
	for(j=0;j<i-1;j++)
		k=PL->sp[j].next;

    PL->sp[j].next=PL->sp[k].next;

	return 1;    // 删除成功
}

int josephus(PStList josephus_StList,int s,int m)
{
	//入口参数为已存在的链表头指针,起始位置s,报数到m
	int i,s1,w;
	if(!josephus_StList)
	{
		cout<<"表中无元素!";
		return 0;
	}

	cout<<"输出约瑟夫序列:"<<endl;
    
	for(i=josephus_StList->SL;i>0;i--)
	{
		s1=(s1+m-1)%i;  //出列元素下标
		w=josephus_StList->sp[s1].x;
		cout<<w<<"\t";
		Delete_StList(josephus_StList,s1+1);
	}
	return 1;
}
int main()
{
	PStList H=Creat_StList();
	int i;
	for(i=0;i<10;i++)
        Insert_StList(H,9-i);

	for(i=0;i<10;i++)
		cout<<H->sp[i].x<<" ";
	//josephus(H,1,2);
    
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值