1樓:匿名使用者
#include
#include
typedef struct node//節點存放一個資料和指向下一個節點的指標
node;
node *link_create(int n)//建立n個節點的迴圈連結串列
p->pnext = head;//最後一個節點指向頭部,形成迴圈連結串列
return head;
}void link_process(node *head,int k,int m)//從編號為k(1<=k<=n)的人開始報數,數到m的那個人出列;
printf("%d ",p->data);
tmp1->pnext= p->pnext;
free(p);
p = tmp1->pnext;
}printf("%d ",p->data);
free(p);
}int main()
有點長,但是應該看得懂,
迴圈連結串列的。
2樓:匿名使用者
c語言的約瑟夫環問題,利用單迴圈連結串列,**如下:
#include//利用單迴圈連結串列!!!!!
#include
#include
typedef int elemtype;
typedef struct singlenode
sll,*linklist;
int main()
use->next = head;//末首相連,形成環
printf("人員序號為:"); //輸出人員的序號
temp=head;
for(i=0;idata);
temp=temp->next;
}printf("\n");
for(i=0;inext;
}printf("人員出列順序為:");
while (n)
printf("\n");
return 0;
}單連結串列實現**如下:
#include//這是使用單連結串列做的約瑟夫環
#include
#include
typedef int elemtype;
typedef struct singlenode
sll,*linklist;
void listinitialize(sll **head) //初始化
int listinsert(sll *head,int i,elemtype x) //插入
if(j!=i-1)
if((q=(sll *)malloc(sizeof(sll)))==null)
exit(1);
q->data=x;
q->next=p->next;
p->next=q;
return 1;
}int listget(sll *head,int i,elemtype *x) //取
if(j!=i)
*x=p->data;
return 1;
}void yuesefu(sll *head, elemtype n,elemtype m,elemtype k) //約瑟夫刪除操作
while(p->next!=null)
if(p->next==null) p->next=head->next; //控制迴圈
s=p->next; //刪除第k個元素
x=s->data;
if(s->next==null) s->next=head->next; //控制迴圈
p->next=s->next;
printf("%d ",x); //輸出第k個元素
j=j+1; //用以統計總共輸出了多少個元素
free(s);
if(j==n) break;
i=0; //i清零}}
void main()
{sll *head;
int x,i,n,m,k,a=0;
listinitialize(&head); //呼叫初始化函式
printf("請輸入總人數n:");
scanf("%d",&n);
printf("從第m個人開始數起,請輸入m:");
scanf("%d",&m);
printf("數到第k個人,該人出列,請輸入k:");
scanf("%d",&k);
for(i=0;i
關於迴圈佇列實現約瑟夫環(c語言)的問題
3樓:
首先,p是指向頭結點的,或者說第一個結點,然後:
p->next = p; //p->next也指向頭結點,也就是頭結點的next指向自己,那麼一開始只有一個結點時這就已經是一個迴圈連結串列了,後面再插入結點時只要尾結點的next指向頭結點,就能保持它仍然是迴圈連結串列。
node *r = p;//用r來指向尾結點,r=p,因為p->next=p,所以也就是r->next==p,尾結點的next指向頭結點。
for迴圈中:
q->next = r->next;//把新增結點的next指向頭結點,其實等價於q->next=p,因為r->next==p,尾結點的next是指向頭結點的。
r->next = q;//把原先的尾結點的next指向新增結點。
r = q;//把尾結點改為新增結點,因為上面已經將新增結點的next指向頭結點,所以這個操作過後,尾結點的next仍然指向頭結點,也就保持了連結串列仍然是迴圈連結串列。
C語言連結串列問題,c語言連結串列問題
我不知道你用什麼編譯器,不同的編譯器可能結果不一樣。會提示段錯誤的可能是vc編譯器,建議你除錯下 while p1 p1 num 0 struct student next 這個分號你寫錯了,所以會造成字元錯誤,然後定義連結串列的儲存結構是要用typedef struct student的。在主函式...
c語言 單向連結串列如何排序,C語言 單向連結串列如何排序?
問明 void link order stu p head stu pb,pf,temp pf p head if p head null 連結串列為空printf needn t order.n return if p head next null 連結串列有1個節點 printf only on...
C語言連結串列與結構體,c語言結構體與連結串列
北風微風 include include define null 0 define len sizeof struct student struct student int n struct student creat void if n 0 head null p2 next null free ...