joseph问题
主函数部分
#include "03_head.h"
2 int main(int argc, const char *argv[])
3 {
4 int m=0;
5 int n=0;
6 int k=0;
7 printf("请输入m::");
8 scanf("%d",&m);
9 printf("请输入n::");
10 scanf("%d",&n);
11 printf("请输入k::");
12 scanf("%d",&k);
13 Seq *list = creat_list();
14 for(int i=1;i<=m;i++)
15 {
16 insert_head(list,i);
17 }
18 delect_list(list);
19 pointto_list(list,m,n,k);
20 return 0;
21 }
函数部分
22 #include "03_head.h"
23
24 Seq* creat_list()
25 {
26 Seq *head = (Seq*)malloc(sizeof(Seq));
27 if(NULL == head)
28 {
29 printf("创建链表失败\n");
30 return NULL;
31 }
32 head->next = head;
33 return head;
34 }
35 void insert_head(Seq* head,int i)
36 {
37 Seq *temp = (Seq*)malloc(sizeof(Seq));
38 Seq *p = head;
39 temp->data = i;
40 temp->next = NULL;
41 while(p->next != head)
42 {
43 p = p->next;
44 }
45 temp->next = p->next;
46 p->next = temp;
47
48 return;
49 }
50 void delect_list(Seq *head)
51 {
52 Seq *p = head;
53 while(p->next != head)
54 {
55 p = p->next;
56 }
57 p->next = head->next;
58 free(head);
59 return;
60 }
61 void pointto_list(Seq *head,int n,int k,int m)
62 {
63 Seq* p = head;
64 Seq *p2 = head;
65 Seq *p1 = head;
66
67 for(int i=0;i<k-1;i++)
68 {
69 p2 = p2->next;
70 }
71 for(int j=0;j<n;j++)
72 {
73 p = p2;
74 for(int q=0;q<m-1;q++)
75 {
76 p2 = p2->next;
77 }
78 p1 = p2->next;
79 p2->next = p1->next;
80 printf("%d ",p1->data);
81 free(p1);
82 p = p2->next;
83 }
84 putchar(10);
85 return;
86 }
87
头文件部分
88 #ifndef __HEAD_H__
89 #define __HEAD_H__
90 #include <stdio.h>
91 #include <stdlib.h>
92 #include <string.h>
93 typedef int datalist;
94 typedef struct node
95 {
96 datalist data;
97 struct node* next;
98 } Seq;
99
100
101 Seq* creat_list();
102 void insert_head(Seq* head,int n);
103 void delect_list(Seq *head);
104 void pointto_list(Seq *head,int n,int k,int m);
105 #endif
单向循环链表
主函数部分
1 #include "03_head.h"
2 int main(int argc, const char *argv[])
3 {
4 Seq *list = creat_list();
5 int select = 0;
6 int a = 0;
7 while(1)
8 {
9 printf("插入____1\n");
10 printf("查询____2\n");
11 printf("删除____3\n");
12 printf("遍历____4\n");
13 printf("退出____5\n");
14 printf("请选择:::");
15 scanf("%d",&select);
16 switch(select)
17 {
18 case 1:
19 insert_tail(list);
20 break;
21 case 2:
22 seek_list(list);
23 break;
24 case 3:
25 printf("头删____1\n");
26 printf("尾删____2\n");
27 printf("请输入::::");
28 scanf("%d",&a);
29 switch(a)
30 {
31 case 1:
32 delect_head(list);
33 break;
34 case 2:
35 delect_tail(list);
36 break;
37 }
38 break;
39 case 4:
40 lookup_list(list);
41 break;
42 case 5:
43 goto Founce;
44 default:
45 printf("你有病啊!!!");
46 break;
47 }
48 }
49
50 Founce:
51 return 0;
52 }
函数部分
53 #include "03_head.h"
54
55 Seq* creat_list()
56 {
57 Seq *head = (Seq*)malloc(sizeof(Seq));
58 if(NULL == head)
59 {
60 printf("创建头结点失败\n");
61 return NULL;
62 }
63 head->txt.len = 0;
64 head->next = head;
65 return head;
66 }
67
68 void insert_head(Seq *head)
69 {
70 printf("请输入:::");
71 int select;
72 scanf("%d",&select);
73 Seq *temp = (Seq*)malloc(sizeof(Seq));
74 temp->txt.data = select;
75 head->txt.len++;
76 temp->next = head->next;
77 head->next = temp;
78 return;
79 }
80 void insert_tail(Seq *head)
81 {
82 printf("请输入:::");
83 int select;
84 scanf("%d",&select);
85 Seq *temp = (Seq*)malloc(sizeof(Seq));
86 temp->next = NULL;
87 Seq *list = head;
88 temp->txt.data = select;
89 while(list->next != head)
90 {
91 list = list->next;
92 }
93 temp->next = list->next;
94 list->next = temp;
95 head->txt.len++;
96 return;
97 }
98 void seek_list(Seq *head)
99 {
100 Seq *p = head;
101 printf("请输入要查找的位置");
102 int select;
103 scanf("%d",&select);
104 if(head->txt.len < select || select < 0)
105 {
106 printf("输入的位置不合法\n");
107 return;
108 }
109 for(int i=0;i<select;i++)
110 {
111 p = p->next;
112 }
113 printf("%d\n",p->txt.data);
114 }
115 void delect_head(Seq *head)
116 {
117 Seq *list = head;
118 list = head->next;
119 head->next = list->next;
120 free(list);
121 head->txt.len--;
122 return;
123
124 }
125 void delect_tail(Seq *head)
126 {
127 Seq *p1 = head;
128 Seq *p2 = head;
129 while(p1->next->next != head)
130 {
131 p1 = p1->next;
132 }
133 p2 = p1->next;
134 p1->next = head;
135 free(p2);
136 head->txt.len--;
137 return;
138 }
139 void lookup_list(Seq *head)
140 {
141 Seq *p = head->next;
142 while(p != head)
143 {
144 printf("%d ",p->txt.data);
145 p = p->next;
146
147 }
148 putchar(10);
149 return;
150 }
151
头文件部分
152 #ifndef __HEAD_H__
153 #define __HEAD_H__
154 #include <stdio.h>
155 #include <stdlib.h>
156 #include <string.h>
157 typedef int ListType;
158 typedef struct node
159 {
160 union{
161 int len;
162 ListType data;
163 } txt;
164 struct node *next;
165 } Seq;
166
167 Seq* creat_list();
168 void insert_head(Seq *head); //头插
169 void insert_tail(Seq *head); //尾插
170 void seek_list(Seq *head);
171 void delect_head(Seq *head);
172 void delect_tail(Seq *head);
173 void lookup_list(Seq *head);
174 #endif
双向链表
主函数部分
#include "03_head.h"
int main(int argc, const char *argv[])
{
Seq *list = creat_list();
int select = 0;
while(1)
{
printf("插入____1\n");
printf("查询_____2\n");
printf("删除______3\n");
printf("遍历_______4\n");
printf("按位置插入__5\n");
printf("退出_________6\n");
printf("请输入:::");
scanf("%d",&select);
switch(select)
{
case 1:
insert_tail(list);
break;
case 2:
break;
case 3:
delect_position(list);
break;
case 4:
lookup_list_head(list);
break;
case 5:
insert_position(list);
break;
case 6:
goto Founce;
}
}
Founce:
return 0;
}
函数部分
#include "03_head.h"
Seq* creat_list()
{
Seq *head = (Seq*)malloc(sizeof(Seq));
if(NULL == head)
{
printf("创建链表失败\n");
return NULL;
}
head->txt.len = 0;
head->next = head->prev = NULL;
return head;
}
void insert_head(Seq *head)
{
printf("请输入::::");
int select;
scanf("%d",&select);
Seq *temp = (Seq*)malloc(sizeof(Seq));
temp->txt.data = select;
temp->next = NULL;
temp->prev = NULL;
if(NULL == head->next)
{
temp->next = head->next;
head->next = temp;
temp->prev = head;
}
else
{
head->next->prev = temp;
temp->prev = head;
temp->next = head->next;
head->next = temp;
}
head->txt.len++;
return;
}
void insert_tail(Seq* head)
{
printf("请输入::::");
int select;
scanf("%d",&select);
Seq *temp = (Seq*)malloc(sizeof(Seq));
temp->txt.data = select;
temp->prev = NULL;
temp->next = NULL;
Seq *p = head;
while(p->next != NULL)
{
p = p->next;
}
temp->next = p->next;
p->next = temp;
temp->prev = p;
head->txt.len++;
}
void insert_position(Seq *head)
{
printf("请输入位置:::");
int select1;
scanf("%d",&select1);
if(0 > select1 || head->txt.len < select1)
{
printf("输入的位置不合法\n");
return;
}
printf("请输入数据::::");
int select;
scanf("%d",&select);
Seq *temp = (Seq*)malloc(sizeof(Seq));
temp->txt.data = select;
Seq *p = head;
for(int i=1;i<select1;i++)
{
p = p->next;
}
if(NULL == p->next)
{
temp->next = p->next;
p->next = temp;
temp->prev = p;
}
else
{
p->next->prev = temp;
temp->prev = p;
temp->next = p->next;
p->next = temp;
}
head->txt.len++;
return;
}
void delect_head(Seq*head)
{
Seq *p = head;
p = head->next;
head->next = p->next;
if(p->next != NULL)
p->next->prev = head;
p->next=p->prev=NULL;
free(p);
head->txt.len--;
return;
}
void delect_tail(Seq*head)
{
Seq *p = head;
Seq *p1 = head;
while(p->next->next != NULL)
{
p = p->next;
}
p->next->prev = NULL;
p1 = p->next;
p->next = NULL;
free(p1);
head->txt.len--;
return;
}
void delect_position(Seq *head)
{
printf("请输入位置:::");
int select;
scanf("%d",&select);
if(select < 0 || select > head->txt.len)
{
printf("输入的位置不合法\n");
return;
}
Seq* p = head;
for(int i=0;i<select;i++)
{
p = p->next;
}
if(p->next == NULL)
{
p->prev->next = NULL;
p->prev = NULL;
}
else
{
p->next->prev = p->prev;
p->prev->next = p->next;
}
return;
}
void lookup_list_head(Seq *head)
{
Seq *p = head;
while(p->next != NULL)
{
p = p->next;
printf("%d ",p->txt.data);
}
putchar(10);
return;
}
void lookup_list_tail(Seq *head)
{
Seq *p = head;
while(p->next != NULL)
{
p = p->next;
}
while(p->prev != NULL)
{
printf("%d ",p->txt.data);
p = p->prev;
}
putchar(10);
return;
}
头文件部分
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int datalist;
typedef struct node
{
union{
datalist data;
int len;
} txt;
struct node *next;
struct node *prev;
} Seq;
Seq* creat_list();
void insert_head(Seq *head);
void lookup_list_head(Seq *head);
void lookup_list_tail(Seq *head);
void insert_tail(Seq* head);
void insert_position(Seq *head);
void delect_head(Seq*head);
void delect_tail(Seq*head);
void delect_position(Seq *head);
#endif