일상다반사 로그

C연결리스트 - 큐 본문

IT/C,C#

C연결리스트 - 큐

일상다반사로그 2017. 10. 19. 19:31
반응형

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define IS_FULL(ptr)  (!(ptr))
#define IS_EMPTY(ptr)  (!(ptr))

typedef struct {int key;/* 기타 필드 */}element;
typedef struct queue *queue_pointer;
typedef struct queue {
 element item;
 queue_pointer link;
}queue;
queue_pointer front=NULL, rear;

void addq(queue_pointer *front, queue_pointer *rear, element item);
element deleteq(queue_pointer *front);
void print_list(queue_pointer front);

void main(){

 int a;    // 메뉴입력변수
 element item;  
while(1){
 printf("***********************************\n");
 printf("*******       메  뉴         ******\n");
 printf("***********************************\n");
 printf("        1.삽입\n");
 printf("        2.삭제\n");
 printf("        3.출력\n");
 printf("        4.종료\n");
 
 printf("    선택:");scanf("%d",&a);
  if(a==1){          //삽입
 printf("DATA INPUT :");
 scanf("%d",&item);
    addq(&front,&rear,item);
  }else if(a==2){    //삭제
   printf("DATA DELETE \n");
   deleteq(&front);
  }else if(a==3){    //출력
   printf("DATA DISPLAY \n");
   print_list(front);
  }else if(a>=4){
   printf("프로그램이 종료되었습니다.\n");
   exit(-1);
  }
 }//while
}

void addq(queue_pointer *front, queue_pointer *rear, element item) {
 /* 큐의 rear에 원소를 삽입
    큐가 공백이면 front를 변경시켜 새로운


노드를 가리키도록한다.
    그렇지않으면 rear의 링크필드를 변경시켜 새로운노드를 가리킨다.*/

 queue_pointer temp = (queue_pointer) malloc(sizeof (queue)); //새로운 노드 생성
 if (IS_FULL(temp)) {
  fprintf(stderr,"The memory is full");
  exit(1);
 }  
 temp->item = item;
 temp->link = NULL;
 if (*front)          //큐가 공백이 아닐때
          (*rear)->link = temp;
 else
          *front = temp;                      //공백큐인 경우          
 *rear = temp;
}
element deleteq(queue_pointer *front){
 /* 큐에서 원소를 삭제 */
 queue_pointer temp = *front;
 element item;
 if (IS_EMPTY(*front)) {
  fprintf(stderr,"The queue is empty");
  exit(1);
   }
 printf("DELETE VALUE : %d \n",*temp);  //DATA가 삭제되는 값을 출력
 item = temp->item;
 *front = temp->link;
 free(temp);
 return item;
}
/*데이터 출력*/
void print_list(queue_pointer front){

 printf("The list contains: ");

       for( ; front; front=front->link)
               printf("%4d",front->item);
 printf("\n");
}       



이 포스트는 네이버블로그에서 티스토리로 이전하였습니다. 

반응형

'IT > C,C#' 카테고리의 다른 글

로봇C 미로찾기  (0) 2017.11.14
로봇 C 터치 센서  (0) 2017.11.13
C언어 마름모  (0) 2017.10.23
C 최대히프 삽입  (0) 2017.10.20
C 연결리스트 - 스택  (0) 2017.10.18
Comments