- 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
본 자료는 10페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
-
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
목차
내용설명과 소스있음.
본문내용
(compiler)나 인터프리트(interpret) 구현에서 많이 사용한다.
[ 프로그램 ]
/* 스택에 자료를 삽입하는 프로그램 */
void push(data)
char data;
{
if (top == SIZE)
{
printf("stack is full\n");
exit(1);
}
top += 1;
stack[top] = data;
}
[ 프로그램 ]
/* 스택에 자료를 삭제하는 프로그램 */
char pop()
{
char data;
if (top == 0)
{
printf("stack is empty\n");
exit(1);
}
data = stack[top];
top -= 1;
return(data);
}
[ 문제 1 ] 스택에 데이터를 삽입아혹 삭제하는 프로그램을 작성하고 스택의 내용과 스택 위치를 화면상에 나타내시오.
13.6.2 큐(queue)
큐는 두 개의 스택을 하나로 결합해 놓은 형식으로서 한쪽 끝인 뒤(rear)에서는 삽입만 할 수 있고. 반대편 끝인 앞(front)에서는 삭제만 할 수 있는 특성을 갖고 있다.
큐는 가장 먼저 입력된 자교가 가장 먼저 출력되는 FIFO(First-In First-Out)의 형태이다.
큐의 처리 과정을 그림을 통해서 알아보자.
① 큐에 A, B, C가 삽입되어 있는 상태
② 큐에 있는 A가 삭제되어 B가 앞이 된 상태
③ D, E가 삽입되어 뒤가 E를 가리키고 있는 상태
큐의 용도 : 작업 스케줄링, I/O Buffering 등
큐를 구현할 때 선언될 변수
#deifne n 양의 정수값
char queue[n];
int front, rear;
front = rear = -1;
[ 프로그램 ]
/* 큐에 자료를 삽입하는 프로그램 */
void add_queue(data)
char data;
{
if (rear == n-1)
{
printf("queue is full\n");
exit(1);
}
rear += 1;
queue[rear] = data;
}
[ 프로그램 ]
/* 큐에 자료를 삭제하는 프로그램 */
char delete_queue()
{
int i;
char data;
if (rear == -1)
{
printf("queue is empty\n");
exit(1);
}
data = queue[0];
for(i=0; i<=rear; ++I)
queue[i] = queue[I+1];
rear -= 1;
return(data);
}
[ 문제 1 ] 큐에 데이터를 삽입하고 삭제하는 프로그램을 작성하고 큐의 내용과 큐의 front와 rear 위치를 화면상에 나타내시오.
13.6.3 연결 리스트(linked list)
요구에 따라서 데이터를 쉽게 늘릴 수도 있고 줄일 수도 있으므로 융통성 있는 구조이고 데이터들은 임의의 위치에서 삽입되고, 제거할 수 있다.
스택이나 큐는 연속된 메모리를 사용하나 연렬 리스트는 정보의 각 부분이 체인(chain)을 사용하기 때문에 메모리상의 어느 곳이나 접근(access)할 수 있다.
연결 리스트의 용도 : 정보 검색, 프로그래밍 언어 번역, 응용 프로그램의 메모리 관리
연결 리스트의 종류
① 단순 연결 리스트(Singly Linked List)
. 리스트를 한쪽 방향으로 읽을 수 있다. 즉, 데이터를 한쪽 방향으로 탐색할 수 있다.
. 항목을 특정한 장소에 추가할 수 있다.
② 이중 연결 리스트(Doubly Linked List0
. 리스트를 양쪽 방향으로 읽을 수 있다. 즉, 데이터를 양쪽 방향으로 탐색 할 수 있다.
. Link 중 하나가 문제가 발생했을 때 Link가 하나 더 있기 때문에 다시 만들 수 있다.
단순 연결 리스트의 헤드 파일 정의
#deifne NULL 0
typedef char DATA
struct linked_list {
DATA data;
struct linked_list *next;
};
typedef struct linked_list NODE
typedef NODE *LINK;
[ 프로그램 ]
/* 리스트의 생성 프로그램 */
LINK creat_List(string)
char string[];
{
LINK head = NULL, tai1;
int i;
if(string[0] != '\0')
{
head = (LINK)malloc(sizeof(NODE));
head=>data = string[0];
tai1 = head;
for(i=1; string[i] != '\0'; ++i)
{
tai1->next = (LINK) malloc (sizeof (NODE));
tai1 = tai1->next;
tai1->data = string[i];
}
tai1->next = NULL;
}
return(head);
}
[ 프로그램 ]
/* 리스트 원소 개수 계산 프로그램 */
int Count_List(head)
LINK head;
{
LINK tai1;
int sum = 0;
if( head == NULL) return(0);
tai1 = head;
tai1 = tai1->next;
while(tai1 != NULL) {
++sum;
tai1 = tai1->next; }
return(sum);
}
[ 프로그램 ]
/* 리스트 원소 출력 프로그램 */
int Print_List(head)
LINK head;
{
LINK tai1;
if( head == NULL) {
printf("NULL");
return();
tai1 = head;
tai1 = tai1->next;
while(tai1 != NULL) {
printf("%c->", tail->data);
tai1 = tai1->next; }
printf("NULL");
}
2개의 리스트 결합 프로그램
2개의 리스트를 하나의 리스트로 통합하고자 할 때 사용한다.
[ 프로그램 ]
/* 2개의 리스트 결합 프로그램 */
Concatenate_List(l1, l2)
LINK l1, l2;
{
LINK tai1;
if( l1->next == NULL)
l1->next = l2;
else
{
tai1 = l1->next;
while(tai1 != NULL)
tai1 = l1->next; }
tai1=l2;
}
}
[ 프로그램 ]
/* 스택에 자료를 삽입하는 프로그램 */
void push(data)
char data;
{
if (top == SIZE)
{
printf("stack is full\n");
exit(1);
}
top += 1;
stack[top] = data;
}
[ 프로그램 ]
/* 스택에 자료를 삭제하는 프로그램 */
char pop()
{
char data;
if (top == 0)
{
printf("stack is empty\n");
exit(1);
}
data = stack[top];
top -= 1;
return(data);
}
[ 문제 1 ] 스택에 데이터를 삽입아혹 삭제하는 프로그램을 작성하고 스택의 내용과 스택 위치를 화면상에 나타내시오.
13.6.2 큐(queue)
큐는 두 개의 스택을 하나로 결합해 놓은 형식으로서 한쪽 끝인 뒤(rear)에서는 삽입만 할 수 있고. 반대편 끝인 앞(front)에서는 삭제만 할 수 있는 특성을 갖고 있다.
큐는 가장 먼저 입력된 자교가 가장 먼저 출력되는 FIFO(First-In First-Out)의 형태이다.
큐의 처리 과정을 그림을 통해서 알아보자.
① 큐에 A, B, C가 삽입되어 있는 상태
② 큐에 있는 A가 삭제되어 B가 앞이 된 상태
③ D, E가 삽입되어 뒤가 E를 가리키고 있는 상태
큐의 용도 : 작업 스케줄링, I/O Buffering 등
큐를 구현할 때 선언될 변수
#deifne n 양의 정수값
char queue[n];
int front, rear;
front = rear = -1;
[ 프로그램 ]
/* 큐에 자료를 삽입하는 프로그램 */
void add_queue(data)
char data;
{
if (rear == n-1)
{
printf("queue is full\n");
exit(1);
}
rear += 1;
queue[rear] = data;
}
[ 프로그램 ]
/* 큐에 자료를 삭제하는 프로그램 */
char delete_queue()
{
int i;
char data;
if (rear == -1)
{
printf("queue is empty\n");
exit(1);
}
data = queue[0];
for(i=0; i<=rear; ++I)
queue[i] = queue[I+1];
rear -= 1;
return(data);
}
[ 문제 1 ] 큐에 데이터를 삽입하고 삭제하는 프로그램을 작성하고 큐의 내용과 큐의 front와 rear 위치를 화면상에 나타내시오.
13.6.3 연결 리스트(linked list)
요구에 따라서 데이터를 쉽게 늘릴 수도 있고 줄일 수도 있으므로 융통성 있는 구조이고 데이터들은 임의의 위치에서 삽입되고, 제거할 수 있다.
스택이나 큐는 연속된 메모리를 사용하나 연렬 리스트는 정보의 각 부분이 체인(chain)을 사용하기 때문에 메모리상의 어느 곳이나 접근(access)할 수 있다.
연결 리스트의 용도 : 정보 검색, 프로그래밍 언어 번역, 응용 프로그램의 메모리 관리
연결 리스트의 종류
① 단순 연결 리스트(Singly Linked List)
. 리스트를 한쪽 방향으로 읽을 수 있다. 즉, 데이터를 한쪽 방향으로 탐색할 수 있다.
. 항목을 특정한 장소에 추가할 수 있다.
② 이중 연결 리스트(Doubly Linked List0
. 리스트를 양쪽 방향으로 읽을 수 있다. 즉, 데이터를 양쪽 방향으로 탐색 할 수 있다.
. Link 중 하나가 문제가 발생했을 때 Link가 하나 더 있기 때문에 다시 만들 수 있다.
단순 연결 리스트의 헤드 파일 정의
#deifne NULL 0
typedef char DATA
struct linked_list {
DATA data;
struct linked_list *next;
};
typedef struct linked_list NODE
typedef NODE *LINK;
[ 프로그램 ]
/* 리스트의 생성 프로그램 */
LINK creat_List(string)
char string[];
{
LINK head = NULL, tai1;
int i;
if(string[0] != '\0')
{
head = (LINK)malloc(sizeof(NODE));
head=>data = string[0];
tai1 = head;
for(i=1; string[i] != '\0'; ++i)
{
tai1->next = (LINK) malloc (sizeof (NODE));
tai1 = tai1->next;
tai1->data = string[i];
}
tai1->next = NULL;
}
return(head);
}
[ 프로그램 ]
/* 리스트 원소 개수 계산 프로그램 */
int Count_List(head)
LINK head;
{
LINK tai1;
int sum = 0;
if( head == NULL) return(0);
tai1 = head;
tai1 = tai1->next;
while(tai1 != NULL) {
++sum;
tai1 = tai1->next; }
return(sum);
}
[ 프로그램 ]
/* 리스트 원소 출력 프로그램 */
int Print_List(head)
LINK head;
{
LINK tai1;
if( head == NULL) {
printf("NULL");
return();
tai1 = head;
tai1 = tai1->next;
while(tai1 != NULL) {
printf("%c->", tail->data);
tai1 = tai1->next; }
printf("NULL");
}
2개의 리스트 결합 프로그램
2개의 리스트를 하나의 리스트로 통합하고자 할 때 사용한다.
[ 프로그램 ]
/* 2개의 리스트 결합 프로그램 */
Concatenate_List(l1, l2)
LINK l1, l2;
{
LINK tai1;
if( l1->next == NULL)
l1->next = l2;
else
{
tai1 = l1->next;
while(tai1 != NULL)
tai1 = l1->next; }
tai1=l2;
}
}