일상다반사 로그

C 연결리스트 - 스택 본문

IT/C,C#

C 연결리스트 - 스택

일상다반사로그 2017. 10. 18. 21:21
반응형

#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 stack *stack_pointer;
typedef struct stack {
        element item;
       stack_pointer link;
 }stack;
stack_pointer top=NULL;

/*함수선언*/
void add(stack_pointer *top, element item);
element pop(stack_pointer *top);
void print_list(stack_pointer top);

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);
    add(&top,item);
  }else if(a==2){    //삭제
   printf("DATA DELETE \n");
   pop(&top);
  }else if(a==3){    //출력
   printf("DATA DISPLAY \n");
   print_list(top);
  }else if(a>=4){
   printf("프로그램이 종료되었습니다.\n");
   exit(-1);
  }
 }//while
}//main

void add(stack_pointer *top, element item) {
/* 스택의 top에 원소를 삽입 */
  stack_pointer temp = (stack_pointer)malloc(sizeof(stack)); //새 노드를 생성
     if (IS_FULL(temp)) {
          fprintf(stderr,"The memory is full\n");
          exit(1);
     }
  temp->item = item;
     temp->link = *top;
     *top = temp;       //top을 temp를 가리키도록 변경 
}
element pop(stack_pointer *top){
 /* 스택으로부터 원소를 삭제 */
 stack_pointer temp = *top;
 element item;
       if (IS_EMPTY(temp)) {
     fprintf(stderr,"The stack is empty\n");
     exit(1);
    }
 printf("DELETE VALUE : %d \n",*temp);  //DATA가 삭제되는 값을 출력
 item = temp->item;       /*item을 반환하고 top은 그의 링크필드에 있는 주소를  가리키도록 변경*/
 *top = temp->link;
 free(temp);
 return item;
}

void print_list(stack_pointer top) {  /*top의 item필드 내용을 출력한뒤 top을 그의 link 필드에 있는 주소로 대체한다.*/
/*데이터 출력함수*/       /*리스트의 끝 널이 아닐때까지 item필드의 출력과 다음 노드로 이동을 계속한다.*/
 //ptr=top->link;
 printf("The list contains:");
       for( ; top; top=top->link)
               printf("%4d",top->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.19
Comments