質問編集履歴

2

内容

2016/12/14 08:17

投稿

ldangol
ldangol

スコア6

test CHANGED
File without changes
test CHANGED
@@ -6,6 +6,70 @@
6
6
 
7
7
  どなたか解説付きで教えてくださらないでしょうか。
8
8
 
9
+ 自分で勉強しての変更点は、
10
+
11
+ struct cell *prev;
12
+
13
+ を追加し、
14
+
15
+ ListInsert関数を
16
+
17
+ PCELL ListInsert(PCELL pos, const char *string)
18
+
19
+ {
20
+
21
+ PCELL pNewCell;
22
+
23
+ pNewCell = calloc(1, sizeof(CELL));
24
+
25
+
26
+
27
+ if (pNewCell != NULL) {
28
+
29
+ // 新しいセルへの文字列をコピーおよび
30
+
31
+ // ポインタの付け替えを行う
32
+
33
+ strcpy(pNewCell->string, string);
34
+
35
+ pNewCell->next = pos->next;
36
+
37
+ pNewCell->next->prev = pNewCell;
38
+
39
+ pos->next = pNewCell;
40
+
41
+ pNewCell->prev = pos;
42
+
43
+ }
44
+
45
+ return pNewCell;
46
+
47
+ }
48
+
49
+ とし、ListDelete関数は
50
+
51
+ void ListDelete(PCELL pos)
52
+
53
+ {
54
+
55
+ PCELL P0;
56
+
57
+ P0 = pos->prev->next = pos->next;
58
+
59
+ pos->next->prev = pos->prev;
60
+
61
+ pos->prev = pos->next = pos;
62
+
63
+ free(P0);
64
+
65
+
66
+
67
+ }
68
+
69
+ と変更しました。
70
+
71
+ ほかにどのように改編すればよいでしょうか。
72
+
9
73
 
10
74
 
11
75
  #include <stdio.h>

1

内容の変更

2016/12/14 08:17

投稿

ldangol
ldangol

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,5 @@
1
+ C言語についての質問です。
2
+
1
3
  以下のソースコードは単方向連結リストです。
2
4
 
3
5
  これを双方向連結リストに改編し、リストを逆順に表示する ListRevPrintAll 関数を実装したいのですが、わかりません。
@@ -16,16 +18,6 @@
16
18
 
17
19
  #include <crtdbg.h>
18
20
 
19
-
20
-
21
-
22
-
23
- /********************* リスト処理部 *********************/
24
-
25
-
26
-
27
- /* リストセル 構造体定義 */
28
-
29
21
  typedef struct cell {
30
22
 
31
23
  char string[8];
@@ -116,12 +108,6 @@
116
108
 
117
109
  if (pNewCell != NULL) {
118
110
 
119
- // ここを実装する
120
-
121
- // 新しいセルへの文字列をコピーおよび
122
-
123
- // ポインタの付け替えを行う
124
-
125
111
  strcpy(pNewCell->string, string);
126
112
 
127
113
  pNewCell->next = pos->next;
@@ -140,8 +126,6 @@
140
126
 
141
127
  {
142
128
 
143
- // ここを実装
144
-
145
129
  PCELL P0;
146
130
 
147
131
  P0 = pos->next;
@@ -160,8 +144,6 @@
160
144
 
161
145
  {
162
146
 
163
- // ここを実装
164
-
165
147
  PCELL P, PC;
166
148
 
167
149
  PC = header;
@@ -180,8 +162,6 @@
180
162
 
181
163
  }
182
164
 
183
- /********************* main 関数 *********************/
184
-
185
165
 
186
166
 
187
167
  #define BUFSIZE 20
@@ -210,8 +190,6 @@
210
190
 
211
191
  switch (*buf) {
212
192
 
213
- /* リストの先頭に挿入 */
214
-
215
193
  case 'A': case 'a':
216
194
 
217
195
  printf("先頭に挿入する文字列を入力:");
@@ -222,8 +200,6 @@
222
200
 
223
201
  break;
224
202
 
225
- /* 挿入 */
226
-
227
203
  case 'I': case 'i':
228
204
 
229
205
  {
@@ -254,8 +230,6 @@
254
230
 
255
231
  break;
256
232
 
257
- /* 削除 */
258
-
259
233
  case 'D': case 'd':
260
234
 
261
235
  {
@@ -284,16 +258,12 @@
284
258
 
285
259
  break;
286
260
 
287
- /* 全要素の表示 */
288
-
289
261
  case 'P': case 'p':
290
262
 
291
263
  ListPrintAll(header);
292
264
 
293
265
  break;
294
266
 
295
- /* プログラムの終了 */
296
-
297
267
  case 'E': case 'e':
298
268
 
299
269
  ListDestroy(header);
@@ -304,8 +274,6 @@
304
274
 
305
275
  default:
306
276
 
307
- /* ヘルプメッセージの表示 */
308
-
309
277
  printf("(A)dd, (I)nsert, (D)elete, (P)rint, (E)xit\n");
310
278
 
311
279
  }