第一题:使用栈的特点完成进制转换:
#include "seqstack.h"
int main(int argc, const char *argv[])
{
seqStack *S = create();
int m , n;
printf("请输入你要转换的十进制:");
scanf("%d",&m);
printf("你要转换成几进制:");
scanf("%d",&n);
int a = m;
while(m != 0)
{
int y = m % n;
push(S,y);
m = m / n;
}
printf("%d的%d进制=",a,n);
pop(S);
return 0;
}
实现结果:
ubuntu@ubuntu:stack$ ./a.out
创建成功
请输入你要转换的十进制:10
你要转换成几进制:2
入栈成功
入栈成功
入栈成功
入栈成功
10的2进制=1010
ubuntu@ubuntu:stack$ ./a.out
创建成功
请输入你要转换的十进制:100
你要转换成几进制:2
入栈成功
入栈成功
入栈成功
入栈成功
入栈成功
入栈成功
入栈成功
100的2进制=1100100
第二题:使用循环链表实现约瑟夫环:
#include "looplink.h"
int main(int argc, const char *argv[])
{
Looplink *L = listCreat();
if(NULL == L)
{
return -1;
}
/*
listInsertTail(L,10);
listInsertTail(L,7);
listInsertTail(L,5);
listInsertTail(L,3);
listShow(L);
listDeleteTail(L);
listShow(L);
Looplink *S = killHead(L);
L=NULL;
listShow2(S);
*/
int m,n;
printf("请输入几个人围成圈:");
scanf("%d",&m);
printf("喊到几出圈:");
scanf("%d",&n);
//将1-m存入链表
for(int i = 1;i <= m;i++)
{
listInsertTail(L,i);
}
//去头
Looplink *S = killHead(L);
//遍历
listShow2(S);
printf("形成的新的序列为:");
Looplink *q = S;
if(n == 1){
listShow2(S);
}else{
for(int i =1;i < m;i++)
{
for(int j = 1;j < n-1;j++)
{
q = q->next;
}
Looplink *p = q->next;
printf("%d\t",p->data);
q->next = p->next;
free(p);
p = NULL;
q = q->next;
}
printf("%d",q->data);
printf("\n");
}
return 0;
}
结果展示:
ubuntu@ubuntu:looplink$ ./a.out
创建成功
请输入几个人围成圈:8
喊到几出圈:4
插入成功
插入成功
插入成功
插入成功
插入成功
插入成功
插入成功
插入成功
删头成功
链表元素分别是:1 2 3 4 5 6 7 8
形成的新的序列为:4 8 5 2 1 3 7 6