자료구조 - stack과 queue {소스코드, 함수, 출력결과}
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

자료구조 - stack과 queue {소스코드, 함수, 출력결과}에 대한 보고서 자료입니다.

목차

1.목적
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 파일에 출력하였고, 생성된 파일을 열어 비교해 보니, 큐와 스택에 넣었다 나온 정수값들이 반대의 우선순위로 출력되어 있는 것을 확인할 수 있었다.

키워드

  • 가격2,000
  • 페이지수10페이지
  • 등록일2015.03.13
  • 저작시기2015.3
  • 파일형식한글(hwp)
  • 자료번호#959570
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니