반응형
스택 예제를 예전에 구현하였던것을...

이곳에 다시 올려 둡니다.

// 스택//
#include<stdio.h>
#include<conio.h>

int stack[10];
int top;

void init_stack() {
    top = -1;
}

void push(int vall) {
  if(top >= 9)
    printf("\n######## 스택이 꽉 차버렸네요 ########\n");
  else
    stack[++top] = vall;
}

void pop() {
  if(top < 0) 
    printf("########## 더이상 비울 스택이 없습니다. ##########\n");
  else
    --top;
}

void print_stack() {
  int i;
  printf("스택 top --------------------- buttom\n");

  for(i = top; i>= 0; i--)
    printf("%d ", stack[i]);
    printf("\n");
}

void main() {
  int select_num;
  int push_num;
  int exit_flag = 0;

  printf(" 배열을 이용한 스택 프로그램 입니다. \n");

  init_stack();
  while(1) {
    printf(" 1) push 2) pop 3) data print 4) Quit! \n");
    printf(" 숫자를 선택해 주세요 : ");
    scanf("%d",&select_num);
 
    if(select_num > 3) break;
    else {
      switch(select_num) {
         case 1 :
           printf("푸쉬 숫자를 입력해 주세요 =>");
           scanf("%d",&push_num);
           push(push_num);
           printf("푸쉬(push)를 실행 했습니다\n");
         break;
         case 2:
           pop();
           printf("팝(pop)을 실행했습니다\n");
         break;
         case 3:
           print_stack();
         break;
      }
    }
  }
  printf("프로그램을 종료합니다\n");
  getch();
}
반응형
Posted by onlyTheOne
,
반응형
스택 큐 짬뽕 플그램
스택 에 오버플로우 발생시 큐에 스택 내용저장하는 프로그램

소스
----------------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>

int stack[10];
int top;
int queue[10];
int front, rear;

void init_stack();
void push(int vall);
void pop();
void print_stack();
void init_queue();
int get();
int put(int put_num);
void print_queue();
void send_queue();

// 스택
void init_stack() {
  top = -1;
}

void push(int vall) {
  if(top >= 9) {
    printf("\n 스택이 찼습니다. 큐로 바꾸어 저장하겠습니다.\n");
    send_queue();
  } else {
    stack[++top] = vall;
    printf("스택에 저장한 숫자 : %d\n", vall);
  }
}

void pop() {
  if(top < 0) {
    printf(" 스택비움\n");
  } else {
    --top;
  }
}

void print_stack() {
  int i;
  printf(" 스택 top -------------------- buttom\n");

  for(i = top; i>=0;i--) {
    printf("%d ", stack[i]);
  }
  printf("\n");
}

void send_queue() {
  // 스택에서 뽑아서 큐에 저장

  int i;
  printf("스택 Data -> 큐 로 이동\n");
  for(i=top;i>=0;i--) {
    int flag = put(stack[i]);
    if(flag == 0) break;
  }
  printf("스택 Data 큐에 저장완료\n");
}

// 큐
void init_queue() {
  front = rear = 0;
}

int get() {
  int get_num;
  if(front > 9) {
    printf("언더플로우 발생\n");
    get_num = -1;
  } else {
    get_num = queue[front++];
  }
  return get_num;
}

int put(int put_num) {
  int flag = 1;

  if(rear > 9) {
    printf("오버플로우발생\n");
    flag = 0;
  } else {
    queue[rear++] = put_num;
  }
  return flag;
}

void print_queue() {
  int i;
  printf("큐 first ----------- last \n");
  for(i = front; i < rear; i++) {
    printf("%d ", queue[i]);
  }
  putch('\n');
}

void main() {

  int select_num;
  int push_num;
  int exit_flag = 0;

  printf("스택과 큐를 통합한 프로그램\n");

  init_stack(); // 스택초기화
  init_queue(); // 큐초기화
  while(1) {
    printf(" 1) push 2)pop 3)stack data print 4)stack&queue data print 5)Quit! \n");
    printf("숫자를 선택해 주세요 : " );
    scanf("%d",&select_num);

    if(select_num > 4) break;
    else {
      switch(select_num) {
        case 1 :
          printf("푸쉬 숫자를 입력해주세요 => ");
          scanf("%d", &push_num);
          push(push_num);
          printf("푸쉬 실행\n");
        break;
        case 2:
          pop();
          printf("팝 실행\n");
        break;
        case 3:
          print_stack();
        break;
        case 4:
          print_stack();
          print_queue();
        break;
      }
    }
  }
  printf("프로그램을 종료합니다.\n");
  getch();
}
반응형
Posted by onlyTheOne
,