zoukankan      html  css  js  c++  java
  • 循环链表的一个案例-约瑟夫环

    /*
     * Josephus.c
     *
     *  Created on: 2019年7月25日
     *      Author: Administrator
     */
    
    
    #include "CycleLinkList.h"
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    #define M 8
    #define N 3
    
    
    typedef struct MYNUM {
    	CircleLinkNode node;
    	int val;
    } MyNum;
    
    
    void MyPrint(CircleLinkNode *data) {
    	MyNum *num = (MyNum *)data;
    	printf("num: %d ",num->val);
    }
    
    int MyCompare(CircleLinkNode *data1, CircleLinkNode *data2) {
    	MyNum *num1 = (MyNum *)data1;
    	MyNum *num2 = (MyNum *)data2;
    	if(num1->val == num2->val){
    		return CIRCLELINKLIST_TRUE;
    	}
    }
    int main() {
    	printf("约瑟夫环 问题 
    ");
    	//创建循环链表
    	CircleLinkList *clist = Init_CircleLinkList();
    
    	//链表插入数据
    	MyNum num[M];
    	for(int i = 0; i < 8; i++){
    		num[i].val = i + 1;
    		Insert_CircleLinkList(clist, i, (CircleLinkNode *)&num[i]);
    	}
    	//打印
    	Print_CircleLinkList(clist, MyPrint);
    	printf("
     ");
    	//记录当前是第几个人
    	int index = 1;
    	//辅助指针
    	CircleLinkNode *pCurrent = clist->head.next;
    	while(Size_CircleLinkList(clist) > 1)
    	{
    		if(index == N) {
    			MyNum *temNum = (MyNum*)pCurrent;
    			printf("%d ", temNum->val);
    
    			//缓存待删除节点的下一个节点
    			CircleLinkNode *pNext = pCurrent->next;
    			//根据值 删除
    			RemoveByValue_CircleLinkList(clist, pCurrent, MyCompare);
    			pCurrent = pNext;
    			if(pCurrent == &(clist->head)){
    				pCurrent = pCurrent->next;
    			}
    			index = 1;
    		}
    
    		pCurrent = pCurrent->next;
    		if(pCurrent == &(clist->head)){
    			pCurrent = pCurrent->next;
    		}
    		index++;
    	}
    
    	//输出最后一个元素
    	if(Size_CircleLinkList(clist) == 1) {
    		MyNum* tempNum = (MyNum *)Front_CircleLinkList(clist);
    		printf("%d", tempNum->val);
    	}else{
    		printf("出错");
    	}
    	printf("
     ");
    	//释放内存
    	FreeSpace_CircleLinkList(clist);
    
    	return 0;
    }
    
    
  • 相关阅读:
    Hibernate框架做数据库操作
    Spring AOP几个相关术语复习梳理
    Unknown initial character set index '255' received from server...
    使用IDEA的activiti时报错:发现了以元素 'process' 开头的无效内容...
    获取Class实例的4种方式
    maven设置全局和局部jdk版本
    JSP的9大内置对象和4大域对象(作用域)
    oracle中NVL,NVL2,NULLIF,COALESCE等函数
    MIME类型
    Eclipse集成Tomcat,并发布Web工程
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/11324879.html
Copyright © 2011-2022 走看看