作业1:使用无头结点的循环链表实现约瑟夫环问题
//无头结点的约瑟夫环问题
looplink* joseph(looplink *h,int n,int m)
{
if(NULL==h)
{
printf("链表为空\n");
return NULL;
}
int count;
looplink *p=creat();
if(NULL==p)
{
printf("新链表创建失败\n");
return NULL;
}
for(int i=0;i<n;i++)
{
count=1;
while(count<m-1)
{
h=h->next;
count++;
}
printf("第%d个人出圈\n",h->next->data);
looplink *q=h->next;
h->next=q->next;
looplink *l=p;
while(l->next!=p)
{
l=l->next;
}
q->next=l->next;
l->next=q;
h=h->next;
}
return p;
}
功能测试结果
作业2:使用顺序栈实现进制转换问题
//进制转换
int sys(seqstack *S,int num,int s)
{
if(NULL==S)
{
printf("转换失败\n");
return -1;
}
int sum;
do{
sum=num%s;
num=num/s;
push(S,sum);
}while(num/s!=0);
push(S,num);
return 0;
}
功能测试
作业3:使用顺序栈实现括号匹配问题(可选)
//括号匹配问题
int paren(seqstack *S,char *p,int sum)
{
if(NULL==S)
{
printf("匹配失败\n");
return -1;
}
printf("%c",p[1]);
for(int i=0;i<sum;i++)
{
if(p[i]=='('||p[i]=='{'||p[i]=='[')
{
push(S,p[i]);
}
else if( (p[i]==')'&&S->data[S->top]=='(') || (p[i]=='}'&&S->data[S->top]=='{') || (p[i]==']'&&S->data[S->top]=='[') )
{
printf("%c",p[i]);
pop(S);
}
}
if(S->top!=-1)
{
printf("%c括号不匹配\n",S->data[S->top]);
}else
{
printf("括号匹配\n");
}
return 0;
}
功能测试