C语言约瑟夫环顺序表,帮忙改错,谢谢

#include
#include
typedef int DataType;
typedef PSeqList;
void josephus_seq(PSeqList palist,int s,int m)
{
int s1,i,w;
s1=s-1;
for(i=palist->n;i>0;i--)
{
s1=(s1+m-1)%i;
w=palist->element[s1];
printf("out element %d\n",w);
deleteP_seq(palist,s1);
{
int q;
if(s1palist->n-1)
{
printf("Not exist!\n");
return 0;
}
for(q=s1;qn-1;q++)
palist->n=palist->n-1;
return 1;
}
}
}
main()
{
PSeqList jos_alist;
int i;
int n,s,m;
printf("\n please input the value of n=");
scanf("%d",&n);
printf("please input the values of s=");
scanf("%d",&s);
printf("please input the values of m=");
scanf("%d",&m);
jos_alist=createNullList_seq(n);
{
jos_alist palist=(jos_alist)malloc(sizeof(struct SeqList));
if(palist!=NULL)
{
pslist->element=(DataType*)malloc(sizeof(DataType)*m);
if(palist->element)
{
palist->maxnum=m;
palist->n=0;
return palist;
}
else free(palist);
}
printf("Out of space!!\n");
return NULL;
}
if(jos_alist!=NULL)
{
for(i=0;i insertpre_seq(jos_alist,i,i+1);
{
int q;
if(palist->n>=palist->maxnun)
{
printf("Overflow!\n");
return 0;
}
if(pn)
{
printf("Not exist!\n");
return 0;
}
for(q=palist->n-1;q>=p;q--)
palist->element[q+1]=palist->element[q];
palist->element[p]=x;
palist->n=palist->n+1;
return 1;
}
josepjus_seq(jos_alist,s,m);
free(jos_alist->element);
free(jos_alist);
}
}
图片说明

typedef PSeqList; 这个定义呢?代码不全,把struct SeqList的定义先补上

main() 这个怎么连返回值都没有,你这个是turbo c的写法

if(s1palist->n-1) 这里s1后面少运算符

错误太多了,你要是实在不会,搜索个现成的抄抄吧。

 9     for(i=palist->n;i>0;i--)  n是什么参数?应该是m吧!  
12    w=palist->element[s1]; element[s1] 这个数组那里来的? 整个josephus_seq函数中都没有!
17    if(s1palist->n-1)    同上 ,不存在n这个参数!
20    return 在 for循环中,只能反回一次 1次 且整个for循环只会执行一次。

 22  23  同上  都是存在没有定义的字符。
 24    return 的问题 不能出现在循环体内。
 41  42 44  jos_alist palist=(jos_alist)malloc(sizeof(struct SeqList));    jos_alist  是变量  不能当作类型来定义变量  所以 palist 没有定义才会有42  44的报错

copy过来的请稍微用点心,看看是不是那里有点变化,不要拿来就用。剩下的就不说了,都是常识性问题。自己慢慢看吧!

给你个题解
要给你改,你能不能先把代码copy过来整齐点。。。用markdown
这样三行
"cpp"
"代码"
"
"

#include<iostream>
using namespace std;
int n, m, a[30010], r, p;
int main(){
    cin>>n>>m;
    for(int i = 1; i <= n; i++)a[i]=i;
    r = n;  p = 1;
    while(r>1){
        p = (p+m-1)%r;
        if(p==0)p=r;
        cout<<a[p]<<" ";
        for(int i = p; i <= r-1; i++)a[i]=a[i+1];
        r--;
    }
    cout<<a[1]<<"\n";
    return 0;
}