7.21数据结构day3

 约瑟夫取值调用函数:要遍历多少个数字为一层循环,再以需要跳过几个数取一次为循环计数,遇到头节点跳过。

//获得任意删除的那个值
datatype delete_find(Looplink* L,int m){
	Looplink *pt=L;
	Looplink *q;
	if(L==NULL)
	{
		//链表空 
		return -1;
	}
	//n个人循环n次,n等于链表长度 
	int n=L->len; 
	for(int i=0;i<n-1;i++)
	{
		//循环k-1次找到要删除的前一个结点
		for(int j=0;j<m-1;j++)
		{
			pt=pt->next;
			//如果找到的是头结点,绕过 (但循环次数加1) 
			if(pt==L)
			{
				j--;
			}
		}
		// q是要删除的结点 
		q=pt->next;
		// 如果删除的结点q是头结点,绕过 
		if(q==L) 
		{
			q=L->next;
		}
		//删除
		printf("%d\t",q->data);
		pt->next=q->next;
		L->len--;		
	} 
}
#include <stdio.h>
#include <stdlib.h>
#include "looplink.h"

int main(int argc, const char *argv[])
{
	Looplink *p=list_create();
	//尾插初始化循环链表
	int n,m;
	datatype x;
	printf("输入需要的数字个数:");
	scanf("%d",&n);
	printf("输入数到几就出圈的人数:");
	scanf("%d",&m);
	printf("输入要存的数据:");
	for(int i=0;i<n;i++){
		scanf("%d",&p->data);
		list_insert_tail(p,p->data);
	}
	list_show(p);

	//开始取出数据
	delete_find(p,m);
    printf("\n");
	return 0;
}

二:

需要调用到的函数:

#include <stdio.h>
#include <stdlib.h>
#include "seqstack.h"


//创建
seqStack* create(){
	seqStack* S=(seqStack*)malloc(sizeof(seqStack));
	if(NULL==S){
		printf("创建失败\n");
		return NULL;
	}
	//初始化
	S->top=-1;            //将栈顶设置为-1

	printf("创建成功\n");
	return S;
}
//判空
int empty(seqStack* S){
	if(NULL==S){
		printf("不合法\n");
		return -1;
	}
	return S->data==NULL?1:0;
}
//判满
int full(seqStack* S){
	return S->top==MAX-1?1:0;
}

//入栈、进栈、压栈
int push(seqStack* S,datatype e){
	//判断逻辑
	if(NULL==S||full(S)){
		printf("入栈失败\n");
		return -1;
	}
	//入栈操作
	S->top++;
	S->data[S->top]=e;
	printf("入栈成功\n");
	return 0;
}
//出栈,弹栈
int pop(seqStack* S){
	//判断逻辑
	if(NULL==S||empty(S)){
		printf("出栈失败\n");
		return -1;
	}
	//出栈逻辑
	printf("%d\n",S->data[S->top]);
	S->top--;

	return 0;
}
//遍历栈
void show(seqStack* S){
	//判断逻辑
	if(NULL==S||empty(S)){
		printf("遍历失败\n");
		return ;
	}
	printf("从栈顶到栈底元素分别是:");
	for(int i=S->top;i>=0;i--){
		printf("%d\t",S->data[i]);
	}
	printf("\n");
}
//销毁栈
void destroy(seqStack* S){
	if(NULL!=S){
		free(S);
		S=NULL;
	}
	printf("删除成功\n");
}

实现的main函数内容;

#include <stdio.h>
#include <stdlib.h>
#include "seqstack.h"

int main(int argc, const char *argv[])
{
	seqStack* p=create();

	int m,n;
	printf("输入被模数:");
	scanf("%d",&m);
	printf("输入模数:");
	scanf("%d",&n);
	while(m!=0){
		datatype x =(datatype)m%n;
		m=m/n;
		push(p,x);
	}
	while(p->top!=-1){
		datatype y=pop(p);
	}
	return 0;
}

 结果图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值