First, 문자 DLL code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142 |
#include<stdio.h>
#include<glib.h>
#include<stdlib.h>
#include<string.h>
GList *head = 0;
GList *cur = 0;
int add(char *i) //문자열을 추가하는 함수 add, 추가하려는 문자열을 입력받는 포인터i
{
char *temp; //add함수에 추가한 문자열을 넣기 위한 포인터temp를 선언
if (strcmp(i, "999") != 0) //입력한 문자열이 999가 아닐 경우(문자끼리 비교하기 위해서 strcmp를 써준다.)
{
temp = (char *)malloc(sizeof(char)*(strlen(i))); //배열 i사이즈로 temp를 메모리를 할당한다.
strcpy(temp, i); //포인터temp에 입력한 문자열 i를 넣는다.(배열은 strcpy로 복사해준다.)
head = g_list_append(head, temp); //temp를 head에 넣고 다시 head에 넣는다.(리눅스 glib에서 제공하는 add함수)
return 1; //입력한 숫자가 999가 아닐 경우 입력한 문자열들을 추가하고 1을 반환 해준다.
}
return 0; //입력한 숫자가 999일 경우 0을 반환 해준다.(add함수를 끝냄)
}
int showall() //GList안의 숫자들을 보여주는 함수
{
if (head != 0) //GList안의 값이 있을때
{
cur = head; //하나하나씩 출력하기 위해 cur을 선언, 이때 cur은 head를 가리킨다.
while (cur != 0) //cur이 카리키는 head가 값이 있을때
{
printf("%s-->", (char *)cur->data); //문자열출력, cur은 포인터이고 cur안의 data는 입력한 문자열 포인터 i를 가리키는 char 포인터이므로 (char *)를 쓴다.
cur = cur->next; //하나하나씩 출력하기 위해 cur을 옆으로 차례 대로 옯겨준다.
}
printf("\n"); //한줄 띄기
}
}
int delete(char *i) //지우는 함수 delete, 지우려는 문자열을 입력 받는 포인터i
{
cur = head; //지우려는 문자열을 찾기 위해 cur을 선언하고, 이때 head를 가리킨다.
if (strcmp(i, "999") != 0) //입력한 문자열이 999가 아닐때
{
while (cur != 0) //cur이 가리키고 있는 head가 값이 있을 때
{
if (strcmp((char *)cur->data, i) == 0) //cur안의 data가 찾는 i일때
{
head = g_list_delete_link(head, cur); //glib가 제공하는 delete함수
break; //지우고 while문을 빠져 나온다.
}
cur = cur->next; //지우려는 i를 찾기 위해서 cur을 차례대로 옆으로 옯겨준다.
}
return 1; //999외의 숫자를 입력했을 경우 입력한 숫자를 지우고 1을 반환 한다
}
return 0; //999를 입력했을 경우 0을 반환한다.(delete함수를 끝냄)
}
int search(char *i) //찾는 함수 search, 찾으려는 문자열을 입력받는 포인터i
{
cur = head; //i를 찾기 위해서 cur을 선언, 이때 cur은 head를 가리킨다.
if (strcmp(i, "999") != 0) //입력한 숫자가 999가 아닐 때
{
while (cur != 0) //cur이 가리키고 있는 head가 값이 있을 때
{
if (strcmp((char *)cur->data, i) != 0) //가리키고 있는 data가 i가 아닐 때
{
cur = cur->next; //cur을 차례대로 옆으로 옮겨준다.
if (strcmp((char *)cur->data, i) == 0) //i를 찾았을 때
{
printf("%s \n", (char *)cur->prev->data); //i를 찾으면 그 전의 문자열을 출력한다.
break; //문자열을 찾고 그 전의 문자열을 출력했으면 while문을 빠져 나온다.
}
}
else //가리키고 있는 data가 i일때(현재 cur을 head를 가리키고 있기 때문에 그 전의 문자열이 없으므로 nothing을 출력해주어야 한다.)
{
printf("nothing! \n"); //nothing출력
break; //nothing을 출력하면 while문을 빠져 나온다.
}
}
return 1; //문자열을 찾고 출력을 했으면 1을 반환한다.
}
return 0; //999를 입력 했을 때 0을 반환 해준다.(search함수를 끝냄)
}
int main(void)
{
int a = 0;
char i[30]; //명령어를 입력받고, 문자열을 받는 배열 i
int *temp = 0;
char m[30]; //명령어를 입력받는 배열 i
while (1)
{
printf("Enter command:");
scanf("%s", m);
if (strcmp(m, "add") == 0) //입력하는 명령어가 add일때
{
while (1)
{
printf("Enter word to add:");
scanf("%s", i); //추가하려는 문자열 i
a = add(i); //add함수에 입력받는 i를 넣고 그add함수를 a에 저장.
if (a == 0) //add에서 반환한 값이 0일 경우
{
break; //while문을 빠져 나온다.
}
}
}
if (strcmp(m, "showall") == 0) //입력하는 명령어가 showall일때
{
showall(); //showall함수를 불러 온다.
}
if (strcmp(m, "delete") == 0) //입력하는 명령어가 delete일때
{
while (1)
{
printf("Enter word to delete:");
scanf("%s", i); //지우려는 문자열 i
a = delete(i); //delete 함수에 입력받은 문자열을 넣고, delete함수를 a에 저장.
if (a == 0) //delete에서 반환된 값이 0일 경우
{
break; //while문을 빠져 나온다.
}
}
}
if (strcmp(m, "search") == 0) //입력하는 명령어가 search일 경우
{
while (1)
{
printf("Enter word to search:");
scanf("%s", i); //search함수에 i를 넣고, search함수를 a에 저장.
a = search(i); //search에서 반환된 값이 0일때
if (a == 0)
{
break; //while문을 빠져 나온다.
}
}
}
if (strcmp(m, "quit") == 0) //입력하는 명령어가 quit일 경우
{
break; //while문을 빠져 나온다.(프로그램을 종료한다.)
}
}
return 0;
} |
cs |
-문자 DLL 결과
(1) 문자 DLL code add
|
./test2로 실행하면 ‘Enter command'로 명령어입력을 한다. add는 DList에 추가하는 함수이다. one,two,three,four,five를 차례대로 추가 한다. 999는 add함수를 빠져나오는 입력 값이다. |
(2) 문자 DLL code showall
|
showall은 DList에 저장된 문자열들을 차례대로 보여주는 함수이다. |
(3) 문자 DLL code search
|
search함수는 DList에 저장된 문자열들 중에 한 문자열을 입력하면 그 숫자의 바로 전 문자열이 출력이 된다. 999는 search함수를 빠져나오는 입력 값이다. |
(4) 문자 DLL code delete
|
delete는 DList에 저장 된 문자열들 중 한 문자열‘four’를 입력하면 그 문자열‘four’를 삭제하는 함수이다. 999는 delete를 빠져나오는 입력 값이다. |
(5) 문자 DLL code quit
|
quit를 입력하면 문자열 DList프로그램을 끝낸다. |
Second, 숫자 DLL code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142 |
#include<stdio.h>
#include<glib.h>
#include<stdlib.h>
#include<string.h>
GList *head = 0;
GList *cur = 0;
int add(int i) //숫자를 추가하는 함수 add, 추가하려는 숫자를 입력받는 i
{
int *temp; //add함수에 추가한 숫자를 넣기 위한 포인터temp를 선언
if (i != 999) //입력한 숫자가 999가 아닐 경우
{
temp = (int *)malloc(sizeof(int)); //int사이즈로 temp를 메모리를 할당한다.
*temp = i; //포인터temp에 입력한 숫자 i를 넣는다.
head = g_list_append(head, temp); //temp를 head에 넣고 다시 head에 넣는다.(리눅스 glib에서 제공하는 add함수)
return 1; //입력한 숫자가 999가 아닐 경우 입력한 숫자들을 추가하고 1을 반환 해준다.
}
return 0; //입력한 숫자가 999일 경우 0을 반환 해준다.(add함수를 끝냄)
int showall() //GList안의 숫자들을 보여주는 함수
{
if (head != 0) //GList안의 값이 있을때
{
cur = head; //하나하나씩 출력하기 위해 cur을 선언, 이때 cur은 head를 가리킨다.
while (cur != 0) //cur이 카리키는 head가 값이 있을때
{
printf("%d-->", *(int *)cur->data); //숫자출력, cur은 포인터이고 cur안의 data는 입력한 숫자 i를 가리키는 int 포인터이므로 *(int *)를 쓴다.
cur = cur->next; //하나하나씩 출력하기 위해 cur을 옆으로 차례 대로 옯겨준다.
}
printf("\n"); //한줄 띄기
}
}
int delete(int i) //지우는 함수 delete, 지우려는 숫자를 입력 받는 i
{
cur = head; //지우려는 숫자를 찾기 위해 cur을 선언하고, 이때 head를 가리킨다.
if (i != 999) //입력한 숫자가 999가 아닐때
{
while (cur != 0) //cur이 가리키고 있는 head가 값이 있을 때
{
if (*(int *)cur->data == i) //cur안의 data가 찾는 i일때
{
head = g_list_delete_link(head, cur); //glib가 제공하는 delete함수
break; //지우고 while문을 빠져 나온다.
}
cur = cur->next; //지우려는 i를 찾기 위해서 cur을 차례대로 옆으로 옯겨준다.
}
return 1; //999외의 숫자를 입력했을 경우 입력한 숫자를 지우고 1을 반환 한다.
}
return 0; //999를 입력했을 경우 0을 반환한다.(delete함수를 끝냄)
}
int search(int i) //찾는 함수 search, 찾으려는 숫자를 입력받는 i
{
cur = head; //i를 찾기 위해서 cur을 선언, 이때 cur은 head를 가리킨다.
if (i != 999) //입력한 숫자가 999가 아닐 때
{
while (cur != 0) //cur이 가리키고 있는 head가 값이 있을 때
{
if (i != *(int *)cur->data) //가리키고 있는 data가 i가 아닐 때
{
cur = cur->next; //cur을 차례대로 옆으로 옮겨준다.
if (*(int *)cur->data == i) //i를 찾았을 때
{
printf("%d \n", *(int *)cur->prev->data); //i를 찾으면 그 전의 숫자를 출력한다.
break; //숫자를 찾고 그 전의 숫자를 출력했으면 while문을 빠져 나온다.
}
}
else //가리키고 있는 data가 i일때(현재 cur을 head를 가리키고 있기 때문에 그 전의 숫자는 없으므로 nothing을 출력해주어야 한다.)
{
printf("nothing! \n"); //nothing출력
break; //nothing을 출력하면 while문을 빠져 나온다.
}
}
return 1; //숫자를 찾고 출력을 했으면 1을 반환한다.
}
return 0; //999를 입력 했을 때 0을 반환 해준다.(search함수를 끝냄)
}
int main(void)
{
int a = 0;
int i = 0;
char m[20];
while (1)
{
printf("Enter command:");
scanf("%s", m);
if (strcmp(m, "add") == 0) //입력하는 명령어가 add일때
{
while (1)
{
printf("Enter word to add:");
scanf("%d", &i); //추가하려는 숫자 i
a = add(i); //add함수에 입력받는 i를 넣고 그add함수를 a에 저장.
if (a == 0) //add에서 반환한 값이 0일 경우
{
break; //while문을 빠져 나온다.
}
}
}
if (strcmp(m, "showall") == 0) //입력하는 명령어가 showall일때
{
showall(); //showall함수를 불러 온다.
}
if (strcmp(m, "delete") == 0) //입력하는 명령어가 delete일때
{
while (1)
{
printf("Enter word to delete:");
scanf("%d", &i); //지우려는 숫자 i
a = delete(i); //delete 함수에 입력받은 숫자를 넣고, delete함수를 a에 저장.
if (a == 0) //delete에서 반환된 값이 0일 경우
{
break; //while문을 빠져 나온다.
}
}
}
if (strcmp(m, "search") == 0) //입력하는 명령어가 search일 경우
{
while (1)
{
printf("Enter word to search:");
scanf("%d", &i);
a = search(i); //search함수에 i를 넣고, search함수를 a에 저장.
if (a == 0) //search에서 반환된 값이 0일때
{
break; //while문을 빠져 나온다.
}
}
}
if (strcmp(m, "quit") == 0) //입력하는 명령어가 quit일 경우
{
break; //while문을 빠져 나온다.(프로그램을 종료한다.)
}
}
return 0;
}
|
cs |
-숫자 DLL 결과
(1) 숫자 DLL code add
|
./test로 실행하면 ‘Enter command'로 명령어입력을 한다. add는 DList에 추가하는 함수이다. 10,20,30,40,50,60을 차례대로 추가 한다. 999는 add함수를 빠져나오는 입력 값이다. |
(2) 숫자 DLL code showall
|
showall은 DList에 저장된 숫자들을 차례대로 보여주는 함수이다. |
(3) 숫자 DLL code search - 1
|
search함수는 DList에 저장된 숫자들 중에 한 숫자를 입력하면 그 숫자의 바로 전 숫자가 출력이 된다. 999는 search함수를 빠져나오는 입력 값이다. |
(4) 숫자 DLL code delete
|
delete는 DList에 저장 된 숫자들 중 한 숫자‘50’을 입력하면 그 숫자‘50’을 삭제하는 함수이다. 999는 delete를 빠져나오는 입력 값이다. |
(5) 숫자 DLL code search - 2
|
50을 삭제한 DList에 add함수로 45,46,47을 차례대로 추가하면 60뒤로 이어져서 저장이 되고 search함수로 45를 입력하면 그 전 숫자 ‘60‘이 출력되고 47를 입력하면 그 전 숫자 ’46‘이 출력이 된다. |
(6) 숫자 DLL code quit
|
quit를 입력하면 숫자 DList프로그램을 끝낸다. |
'그 외 공부' 카테고리의 다른 글
[객체기반SW설계] #Mission 2, JAVA 영어단어 프로그램 (0) | 2015.08.06 |
---|---|
[객체기반SW설계] #Mission 1, JAVA 친구정보 프로그램 (0) | 2015.08.06 |
[SW기초실습1] #Mission 3, Qt를 이용한 stop watch (0) | 2015.08.04 |
[SW기초실습1] #Mission 2, Qt를 이용한 두더지 게임 (0) | 2015.08.04 |
[SW기초실습1] #Mission 1, 간단한 linux 명령어 공부와 소수판단 c프로그램 짜기 (0) | 2015.08.04 |