8000 josephdrlink: 双链表约瑟夫环init & show实现 · home-coder/data-abstraction-001@6c61aeb · GitHub
[go: up one dir, main page]

Skip to content

Commit 6c61aeb

Browse files
author
oneface
committed
josephdrlink: 双链表约瑟夫环init & show实现
1 parent 8292055 commit 6c61aeb

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

002-josephdrlink.c

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/*************************************************************************
2+
> Filename : 002-josephdrlink.c
3+
> Author : oneface - one_face@sina.com
4+
> Company : Monte Cristo
5+
> Time : 2018-02-09 14:15:04
6+
************************************************************************/
7+
8+
#include<stdio.h>
9+
#include <stdlib.h>
10+
11+
/*
12+
不要有头节点,仅仅使用首元节点,方便问题的解决
13+
*/
14+
15+
typedef struct _josephdrlink {
16+
char data;
17+
struct _josephdrlink *prev;
18+
struct _josephdrlink *next;
19+
}josephdrlink;
20+
21+
static void josephdrlink_init(josephdrlink **jspdr, int people)
22+
{
23+
int i = 0;
24+
josephdrlink *jspdrp = *jspdr, *njspdr;
25+
26+
if (jspdrp != NULL) {
27+
printf("josephdrlink is already exsit\n");
28+
return ;
29+
}
30+
31+
while (i < people) {
32+
njspdr = (josephdrlink *)malloc(sizeof(josephdrlink));
33+
if (!njspdr) {
34+
printf("njspdr malloc failed\n");
35+
return ;
36+
}
37+
njspdr->data = 'a' + i++;
38+
39+
if (!jspdrp) {
40+
jspdrp = njspdr;
41+
jspdrp->next = jspdrp;
42+
jspdrp->prev = jspdrp;
43+
*jspdr = jspdrp;
44+
} else {
45+
njspdr->next = jspdrp->next;
46+
jspdrp->next->prev = njspdr;
47+
jspdrp->next = njspdr;
48+
njspdr->prev = jspdrp;
49+
}
50+
jspdrp = jspdrp->next;
51+
}
52+
}
53+
54+
static void josephdrlink_show(josephdrlink *jspdr)
55+
{
56+
josephdrlink *jspdrp = jspdr;
57+
if (!jspdrp) {
58+
printf("josephdrlink is not exsit\n");
59+
return ;
60+
}
61+
62+
do {
63+
printf("%c->", jspdrp->data);
64+
jspdrp = jspdrp->next;
65+
} while(jspdrp != jspdr);
66+
67+
printf("\n");
68+
}
69+
70+
int main(int argc, char **argv)
71+
{
72+
int people, hit;
73+
josephdrlink *jspdr = NULL;
74+
75+
if (argc < 3) {
76+
fprintf(stderr, "please read usage: ./a.out 24 3\n");
77+
return ;
78+
}
79+
80+
people = atoi(argv[1]);
81+
hit = atoi(argv[2]);
82+
printf("p %d h %d\n", people, hit);
83+
84+
josephdrlink_init(&jspdr, people);
85+
josephdrlink_show(jspdr);
86+
87+
return 0;
88+
}

0 commit comments

Comments
 (0)
0