목차
1.목적
2.소스코드
3.이용한 함수
4.출력결과
5.정리
2.소스코드
3.이용한 함수
4.출력결과
5.정리
본문내용
t rIdx;
if(SIsEmpty(pstack))
{
printf("Stack Memory Error!");
exit(-1);
}
rIdx=pstack->topIndex;
pstack->topIndex -=1;
return pstack->stackArr[rIdx];
}
Data SPeek(Stack * pstack)
{
if(SIsEmpty(pstack))
{
printf("Stack Memory Error!");
exit(-1);
}
return pstack->stackArr[pstack->topIndex];
}
int main()
{
Stack stack;
Queue q;
int i,k=0,m=0,count;
int iarr[1000]; //배열선언
FILE* in; //파일을생성
in=fopen("rand_list.txt","w");
for(i=0;i
QueueInit(&q);
StackInit(&stack);
for(i=0;i
{
k = iarr[i];
Enqueue(&q,k);
}
while(!QIsEmpty(&q)){
fprintf(in,"%d\n",Dequeue(&q)); //큐에서받은정수를rand_list 파일에출력한다
}
for(i=0;i
{
k = iarr[i];
SPush(&stack,k);
}
//fclose(in);
in=fopen("rand_list_r.txt","w"); //스택에서pop한내용을출력할파일을생성한다
while(!SIsEmpty(&stack)){
fprintf(in,"%d\n",SPop(&stack)); //rand_list_r파일에스택에서pop한결과를출력한다
}
fclose(in);
return 0;
}
2.함수
void QueueInit(Queue * pq)
{
pq->front = 0;
pq->rear = 0;
}
front와 rear의 위치를 0으로 초기화 시켜준다.
int QIsEmpty(Queue * pq)
{
if(pq->front == pq->rear)
return TRUE;
else
return FALSE;
}
원형 큐가 텅 비어 있는지 front와 rear 값이 동일하다는 조건문을 이용하여 확인한다.
참이면 1을, 거짓이면 0을 리턴한다.
int NextPosIdx(int pos)
{
if(pos == QUE_LEN-1)
return 0;
else
return pos+1;
}
최대치(전체길이-1)가 아니라면,front 나 rear 의 위치를 한칸 뒤로 옮겨주는 역할을 하는 함수이다.
void Enqueue(Queue * pq, Data data)
{
if(NextPosIdx(pq->rear)==pq->front)
{
printf("Queue Memory Error!");
exit(-1);
}
pq->rear = NextPosIdx(pq->rear);
pq->queArr[pq->rear]=data;
}
큐에 데이터를 입력하고 rear의 위치를 한단계 옮겨주는 함수이다.
rear와 front의 위치가 같다면, 에러 메시지를 출력한다.
Data Dequeue(Queue * pq)
{
if(QIsEmpty(pq))
{
printf("Queue Memory Error !");
exit(-1);
}
pq->front = NextPosIdx(pq->front);
return pq->queArr[pq->front];
}
큐에 있는 데이터를 삭제해주는 함수이다.
큐는 선입선출 방식을 이용하기 때문에, 데이터를 삭제 한 후에 front를 한칸 뒤로 옮겨준다. 큐가 비어있다면, 에러 메시지를 출력한다.
스택
void StackInit(Stack *pstack)
{
pstack->topIndex=-1;
}
큐를 생성하는 함수이다. top의 초기값을 -1로 설정해 준다.
void SPush(Stack *pstack,Data data)
{
pstack->topIndex +=1;
pstack->stackArr[pstack->topIndex]=data;
}
스택에 push하는 함수이다.
top의 값을 한칸 올려주고 데이터 값을 입력한다.
Data SPop(Stack *pstack)
{
int rIdx;
if(SIsEmpty(pstack))
{
printf("Stack Memory Error!");
exit(-1);
}
rIdx=pstack->topIndex;
pstack->topIndex -=1;
return pstack->stackArr[rIdx];
}
스택에 입력되어 있는 데이터를 삭제하기 위한 pop 함수이다.
top의 위치를 한단계 아래로 내려준다.
만약 스택이 비어있는 경우, 에러메시지를 출력한다.
4.출력결과
[실행창]
[생성된 텍스트 파일]
rand_list.txt
ran_list_r.txt
->100을 입력하여 임의의 정수 100개를 출력하게 만든 후,rand_list파일과 rand_list_r 파일의 출력값을 비교하여 확인해 보니, 큐에 넣어준 1번째 랜덤값이 큐에 들어갔다 나오면서 역순으로 100번째부터 출력된 것을 확인할 수 있었다.
5.정리
랜덤으로 정수를 입력받기 위해서 랜덤함수(rand())를 사용하였다.
scanf로 받은 정수값의 개수만큼 임의의 정수를 랜덤함수로 받아 배열에 저장하였고, 그 배열에서 값을 받아 큐에 넣었다. 큐는 선입선출 방식을 이용하기 때문에, dequeue를 하여도 enqueue 했을때의 우선순위대로 출력이 된다. 큐에 dequeue한 결과 값을 rand_list.txt 파일에 출력하였다.
큐에 넣은 랜덤정수가 입력되어있는 배열을 똑같이 스택에 pop 한 뒤, push 하였다. 스택은 큐와는 반대로, 후입선출 방식을 이용하기 때문에, push했을때와는 역순으로 출력이 된다.
push한 값을 이번엔 rand_list_r.txt 파일에 출력하였고, 생성된 파일을 열어 비교해 보니, 큐와 스택에 넣었다 나온 정수값들이 반대의 우선순위로 출력되어 있는 것을 확인할 수 있었다.
if(SIsEmpty(pstack))
{
printf("Stack Memory Error!");
exit(-1);
}
rIdx=pstack->topIndex;
pstack->topIndex -=1;
return pstack->stackArr[rIdx];
}
Data SPeek(Stack * pstack)
{
if(SIsEmpty(pstack))
{
printf("Stack Memory Error!");
exit(-1);
}
return pstack->stackArr[pstack->topIndex];
}
int main()
{
Stack stack;
Queue q;
int i,k=0,m=0,count;
int iarr[1000]; //배열선언
FILE* in; //파일을생성
in=fopen("rand_list.txt","w");
for(i=0;i
StackInit(&stack);
for(i=0;i
k = iarr[i];
Enqueue(&q,k);
}
while(!QIsEmpty(&q)){
fprintf(in,"%d\n",Dequeue(&q)); //큐에서받은정수를rand_list 파일에출력한다
}
for(i=0;i
k = iarr[i];
SPush(&stack,k);
}
//fclose(in);
in=fopen("rand_list_r.txt","w"); //스택에서pop한내용을출력할파일을생성한다
while(!SIsEmpty(&stack)){
fprintf(in,"%d\n",SPop(&stack)); //rand_list_r파일에스택에서pop한결과를출력한다
}
fclose(in);
return 0;
}
2.함수
void QueueInit(Queue * pq)
{
pq->front = 0;
pq->rear = 0;
}
front와 rear의 위치를 0으로 초기화 시켜준다.
int QIsEmpty(Queue * pq)
{
if(pq->front == pq->rear)
return TRUE;
else
return FALSE;
}
원형 큐가 텅 비어 있는지 front와 rear 값이 동일하다는 조건문을 이용하여 확인한다.
참이면 1을, 거짓이면 0을 리턴한다.
int NextPosIdx(int pos)
{
if(pos == QUE_LEN-1)
return 0;
else
return pos+1;
}
최대치(전체길이-1)가 아니라면,front 나 rear 의 위치를 한칸 뒤로 옮겨주는 역할을 하는 함수이다.
void Enqueue(Queue * pq, Data data)
{
if(NextPosIdx(pq->rear)==pq->front)
{
printf("Queue Memory Error!");
exit(-1);
}
pq->rear = NextPosIdx(pq->rear);
pq->queArr[pq->rear]=data;
}
큐에 데이터를 입력하고 rear의 위치를 한단계 옮겨주는 함수이다.
rear와 front의 위치가 같다면, 에러 메시지를 출력한다.
Data Dequeue(Queue * pq)
{
if(QIsEmpty(pq))
{
printf("Queue Memory Error !");
exit(-1);
}
pq->front = NextPosIdx(pq->front);
return pq->queArr[pq->front];
}
큐에 있는 데이터를 삭제해주는 함수이다.
큐는 선입선출 방식을 이용하기 때문에, 데이터를 삭제 한 후에 front를 한칸 뒤로 옮겨준다. 큐가 비어있다면, 에러 메시지를 출력한다.
스택
void StackInit(Stack *pstack)
{
pstack->topIndex=-1;
}
큐를 생성하는 함수이다. top의 초기값을 -1로 설정해 준다.
void SPush(Stack *pstack,Data data)
{
pstack->topIndex +=1;
pstack->stackArr[pstack->topIndex]=data;
}
스택에 push하는 함수이다.
top의 값을 한칸 올려주고 데이터 값을 입력한다.
Data SPop(Stack *pstack)
{
int rIdx;
if(SIsEmpty(pstack))
{
printf("Stack Memory Error!");
exit(-1);
}
rIdx=pstack->topIndex;
pstack->topIndex -=1;
return pstack->stackArr[rIdx];
}
스택에 입력되어 있는 데이터를 삭제하기 위한 pop 함수이다.
top의 위치를 한단계 아래로 내려준다.
만약 스택이 비어있는 경우, 에러메시지를 출력한다.
4.출력결과
[실행창]
[생성된 텍스트 파일]
rand_list.txt
ran_list_r.txt
->100을 입력하여 임의의 정수 100개를 출력하게 만든 후,rand_list파일과 rand_list_r 파일의 출력값을 비교하여 확인해 보니, 큐에 넣어준 1번째 랜덤값이 큐에 들어갔다 나오면서 역순으로 100번째부터 출력된 것을 확인할 수 있었다.
5.정리
랜덤으로 정수를 입력받기 위해서 랜덤함수(rand())를 사용하였다.
scanf로 받은 정수값의 개수만큼 임의의 정수를 랜덤함수로 받아 배열에 저장하였고, 그 배열에서 값을 받아 큐에 넣었다. 큐는 선입선출 방식을 이용하기 때문에, dequeue를 하여도 enqueue 했을때의 우선순위대로 출력이 된다. 큐에 dequeue한 결과 값을 rand_list.txt 파일에 출력하였다.
큐에 넣은 랜덤정수가 입력되어있는 배열을 똑같이 스택에 pop 한 뒤, push 하였다. 스택은 큐와는 반대로, 후입선출 방식을 이용하기 때문에, push했을때와는 역순으로 출력이 된다.
push한 값을 이번엔 rand_list_r.txt 파일에 출력하였고, 생성된 파일을 열어 비교해 보니, 큐와 스택에 넣었다 나온 정수값들이 반대의 우선순위로 출력되어 있는 것을 확인할 수 있었다.
추천자료
자바 자료구조 족보
(자료구조) 스택을 이용한 후위연산 소스
(자료구조) 단순 연결리스트를 이용한 삽입 & 삭제 & 검색 소스
(자료구조) 이중연결리스트를 이용한 삽입 & 삭제 & 검색 소스
(자료구조) 큐를 이용한 환상형 연결리스트 삽입 & 삭제 소스
(자료구조) 스레드 이진트리 중위운행 결과 소스
(자료구조) 트리를 이용한 비순환적 중위운행 결과 소스
[자료구조]Infix로 된 수식을 Prefix와 Postfix로 변환 시키는 프로그램입니다.(C언어)
[자료구조] 배열을 이용한 다항식의 덧셈 곱셈 연산
알고리즘, 자료구조 중 '문자열매칭' ppt 개념설명 수업시연
[자료구조, Algorithm] 외부정렬(External Sort) PPT version
[자료구조] 연결 리스트를 이용한 오름차순 정리
철근 콘크리트 구조.PPT자료
연결리스트(자료구조).ppt
소개글