資料結構與演算法 迴圈鍊錶 約瑟夫問題

2021-08-19 00:04:42 字數 3078 閱讀 6633

只是在單鏈表的程式上更改了生成鍊錶,遍歷鍊錶和約瑟夫問題,其他部分功能程式**還沒有更改。但可以使用

#include #define error 0

#define ok 1

#define elemtype int

#define n 10

typedef int status;

typedef struct node

node;

typedef struct node* linklist;

/*遍歷鍊錶元素並列印*/

status visitlist(linklist l)

printf("鍊錶長度為:%d\n",j);

return ok;

}/*獲取鍊錶長度*/

int listlength(linklist l)

return i;

}/*使用尾插法建立長度為n的迴圈鍊錶*/

status createlisttail(linklist *l,int n)

r->next=(*l);

visitlist(*l);

return ok;

}/*使用快慢指標法求得鍊錶中間值*/

status listlinkmid(linklist l,elemtype *e)

else

} mid=mid->next;

*e=mid->data;

return ok;

}/*---獲取鍊錶第i個元素----*/

/*其中1<=i<=listlength(l)*/

status getelem(linklist l,int i,elemtype *e)

while(jnext;

j++;

} *e=p->data;

return ok;

}/*---在鍊錶第i個元素之前插入值e----*/

/*-----其中1<=i<=listlength(l)----*/

status listinsert(linklist *l,int i,elemtype e)

for(j=1;jnext;

}

s=(linklist)malloc(sizeof(node));

s->data=e;

s->next=p->next;

p->next=s;

return ok;

}/*----------刪除鍊錶第i個元素------*/

/*-----其中1<=i<=listlength(l)----*/

status listdelete(linklist *l,int i)

for(j=1;jnext;

}

q=p->next;

p->next=q->next;

free(q);

return ok;

} /*------------鍊錶整表刪除---------*/

/*-----其中1<=i<=listlength(l)----*/

status clearlist(linklist *l)

(*l)->next = null;

return ok;

} status ysfquestion(linklist *l)

} return ok;

}/*status ysfquestion(linklist *l)

printf("參與人數:\n");

visitlist(*l);

int i=listlength(*l);

linklist temp;

p=(*l);

printf("退出順序:\n");

while(p != p->next)

printf("%d ",p->next->data);

temp=p->next;

p->next=temp->next;

free(temp);

}printf("\n");

return ok;

}*/int main()

else

printf("error\n");

break;

case 3: cmr=listlinkmid(l,&e);

if(cmr)

else

printf("error\n");

break;

case 4: printf("請輸入查詢元素:");

scanf("%d",&n);

cmr=getelem(l,n,&e);

if(cmr)

else

printf("error\n");

break;

case 5:printf("請輸入位置和元素:");

scanf("%d,%d",&n,&e);

cmr=listinsert(&l,n,e);

if(cmr)

else

printf("error\n");

break;

case 6: printf("請輸入刪除元素:");

scanf("%d",&n);

cmr=listdelete(&l,n);

if(cmr)

else

printf("error\n");

break;

case 7: cmr=clearlist(&l);

if(cmr)

printf("ok\n");

else

printf("error\n");

break;

case 8: cmr=ysfquestion(&l);

if(cmr)

printf("ok\n");

else

printf("error\n");

break;

default:printf("輸入有誤\n");

break; }

} return 0;

}

資料結構 迴圈鍊錶,約瑟夫環

一 迴圈鍊錶 include stdio.h include stdlib.h typedef struct node node 初始化迴圈鍊錶 void ds init node pnode 初始化迴圈鍊錶,pnode 鍊錶上 else 返回結點所在位置 int ds search node pn...

資料結構之約瑟夫迴圈鍊錶

public class test public class joseph 如果不是首節點 node newnode newnode i,null 建立乙個新節點 pre.next newnode 為當前節點儲存下個節點 pre newnode 將新節點設為當前節點 if i total int c...

資料結構與演算法(4 約瑟夫環問題到迴圈鍊錶)

那麼如何構建環以及如何進行刪除操作是最重要的了!構建之前,我們要有乙個已經存在的tail,有無資料不重要,首先是構建的問題 實現乙個插入操作 void addelements int value else 構建完約瑟夫之後,接下來是乙個刪除操作 index表示需要輸入的數 void delete i...