Skip to content

Commit 43756db

Browse files
committed
ch7
1 parent 948f613 commit 43756db

File tree

8 files changed

+240
-3
lines changed

8 files changed

+240
-3
lines changed

ch4_stack/palindrome.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
// 2020-09-23 Data Structure
1+
// Chapter 4. Stack
22
// Checking the input string is palindrome
3-
// 2017920044 이관희
4-
// 미완성
3+
// Incompletion
54

65

76
#include <stdio.h>

ch5_queue/Queueing_Model.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
// Chapter 5. Queue
2+
// Simulator of Bank waiting system
3+
14
#include <stdio.h>
25
#include <stdlib.h>
36
#include <time.h>

ch6_linkedlist/linkedlist.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
// Chapter 6. LinkedList
2+
// Adding new nodes in sorted order
3+
14
#include <stdio.h>
25
#include <stdlib.h>
36

ch6_linkedlist/linkedlist.exe

0 Bytes
Binary file not shown.

ch7_Dlinkedlist/Dlinkedlist.c

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// Chapter 7. Doubly LinkedList
2+
// Test Doubly LinkedList run well
3+
4+
#include <stdio.h>
5+
#include <stdlib.h>
6+
7+
typedef int element;
8+
typedef struct DListNode
9+
{
10+
element data;
11+
struct DListNode *next;
12+
struct DListNode *prev;
13+
} DListNode;
14+
15+
void init(DListNode *head);
16+
void dinsert(DListNode *before, element data);
17+
void ddelete(DListNode *head, DListNode *removed);
18+
void print_dlist(DListNode *head);
19+
DListNode* search(DListNode *head, element data);
20+
21+
int main(void)
22+
{
23+
DListNode *head = (DListNode *)malloc(sizeof(DListNode *));
24+
element data;
25+
26+
init(head);
27+
28+
printf("\nADDING\n");
29+
for(int i = 0; i < 5; i++)
30+
{
31+
dinsert(head, i);
32+
print_dlist(head);
33+
}
34+
35+
printf("\nInput integer : ");
36+
scanf("%d", &data);
37+
if(search(head, data))
38+
printf("%d is in the list.\n", data);
39+
else
40+
printf("%d is not in the list.\n", data);
41+
42+
printf("\nSUBTRACTING\n");
43+
for(int i = 0; i < 5; i++)
44+
{
45+
print_dlist(head);
46+
ddelete(head, head->next);
47+
}
48+
49+
return 0;
50+
}
51+
52+
void init(DListNode *head)
53+
{
54+
head->next = head;
55+
head->prev = head;
56+
}
57+
58+
void dinsert(DListNode *before, element data)
59+
{
60+
DListNode *node = (DListNode *)malloc(sizeof(DListNode));
61+
62+
node->data = data;
63+
node->next = before->next;
64+
node->prev = before;
65+
before->next->prev = node;
66+
before->next = node;
67+
}
68+
69+
void ddelete(DListNode *head, DListNode *removed)
70+
{
71+
if(removed == head) return;
72+
removed->prev->next = removed->next;
73+
removed->next->prev = removed->prev;
74+
free(removed);
75+
}
76+
77+
void print_dlist(DListNode *head)
78+
{
79+
for(DListNode *p = head->next; p != head; p = p->next)
80+
printf("<-| %d |->", p->data);
81+
printf("\n");
82+
}
83+
84+
DListNode* search(DListNode *head, element data)
85+
{
86+
for(DListNode *p = head->next; p != head; p = p->next)
87+
if(p->data == data)
88+
return p;
89+
return NULL;
90+
}

ch7_Dlinkedlist/Dlinkedlist.exe

57.1 KB
Binary file not shown.

ch7_Dlinkedlist/Dlinkedlist2.c

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
// Chapter 7. Doubly LinkedList
2+
// Using predefined size of array of nodes
3+
// Incompletion
4+
5+
#include <stdio.h>
6+
#include <stdlib.h>
7+
#include <stdbool.h>
8+
9+
// SIZE = max # of nodes, NUM = # of iterations in loop of main
10+
#define SIZE 8
11+
#define NUM 8
12+
13+
typedef int element;
14+
typedef struct DListNode
15+
{
16+
element data;
17+
struct DListNode *next;
18+
struct DListNode *prev;
19+
} DListNode;
20+
21+
DListNode nodes[SIZE];
22+
bool flag[SIZE] = {false};
23+
24+
int find_empty_index();
25+
void init(DListNode *head);
26+
void dinsert(DListNode *before, element data);
27+
void ddelete(DListNode *head, DListNode *removed);
28+
void print_dlist(DListNode *head);
29+
DListNode* search(DListNode *head, element data);
30+
31+
int main(void)
32+
{
33+
int index = find_empty_index();
34+
flag[index] = true;
35+
DListNode *head = nodes + index;
36+
element data;
37+
38+
init(head);
39+
40+
printf("\nADDING\n");
41+
for(int i = 0; i < NUM - 1; i++)
42+
{
43+
dinsert(head, i);
44+
print_dlist(head);
45+
}
46+
47+
ddelete(head, head->next->next->next);
48+
print_dlist(head);
49+
dinsert(head, 9);
50+
print_dlist(head);
51+
ddelete(head, head->next->next);
52+
print_dlist(head);
53+
dinsert(head, 8);
54+
print_dlist(head);
55+
ddelete(head, head->next);
56+
print_dlist(head);
57+
58+
printf("\nInput integer : ");
59+
scanf("%d", &data);
60+
if(search(head, data))
61+
printf("%d is in the list.\n", data);
62+
else
63+
printf("%d is not in the list.\n", data);
64+
65+
printf("\nSUBTRACTING\n");
66+
for(int i = 0; i < NUM; i++)
67+
{
68+
print_dlist(head);
69+
ddelete(head, head->next);
70+
}
71+
72+
return 0;
73+
}
74+
75+
int find_empty_index()
76+
{
77+
int i, half, quater;
78+
79+
half = SIZE / 2;
80+
quater = half / 2;
81+
for(i = half; i >= 0; i--)
82+
if(!flag[i])
83+
return i;
84+
for(i = half + quater; i > half ; i--)
85+
if(!flag[i])
86+
return i;
87+
for(i = SIZE - 1; i > half + quater; i--)
88+
if(!flag[i])
89+
return i;
90+
return -1;
91+
}
92+
93+
void init(DListNode *head)
94+
{
95+
head->next = head;
96+
head->prev = head;
97+
}
98+
99+
void dinsert(DListNode *before, element data)
100+
{
101+
int index;
102+
if((index = find_empty_index()) == -1)
103+
{
104+
fprintf(stderr, "The List is full.\n");
105+
exit(1);
106+
}
107+
flag[index] = true;
108+
DListNode *node = nodes + index;
109+
110+
node->data = data;
111+
node->next = before->next;
112+
node->prev = before;
113+
before->next->prev = node;
114+
before->next = node;
115+
}
116+
117+
void ddelete(DListNode *head, DListNode *removed)
118+
{
119+
if(removed == head)
120+
{
121+
fprintf(stderr, "The List is empty.\n");
122+
exit(1);
123+
}
124+
removed->prev->next = removed->next;
125+
removed->next->prev = removed->prev;
126+
flag[removed - nodes] = false;
127+
}
128+
129+
void print_dlist(DListNode *head)
130+
{
131+
for(DListNode *p = head->next; p != head; p = p->next)
132+
printf("<-| %d |->", p->data);
133+
printf("\n");
134+
}
135+
136+
DListNode* search(DListNode *head, element data)
137+
{
138+
for(DListNode *p = head->next; p != head; p = p->next)
139+
if(p->data == data)
140+
return p;
141+
return NULL;
142+
}

ch7_Dlinkedlist/Dlinkedlist2.exe

57.6 KB
Binary file not shown.

0 commit comments

Comments
 (0)