Stack'ten Queue'ye Eleman Taşıma

// yigittan kuyruga eleman tasima
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 5

//yigit yapisi
struct stack
{
 int arr[MAXSIZE];    //yigittaki elemanlar dizisi
 int top;             //yigita en son eklenmis elemanin indeksini tutuyor
};

//kuyruk yapisindaki dugum
struct qnode {
 int data;
 struct qnode *next;   //bir sonraki dugume isaretci
};


//kuyruk fonksiyon bildirimleri
void displayQueue();
void insertQueue(int);
int isEmpty();

//yigit fonksiyon bildirimleri
void push(struct stack *, int);
int pop(struct stack *);
void displayStack(struct stack *);

//kuyruk olusturma, ilk deger atama
struct qnode *front = NULL;  //kuyrugun basi
struct qnode *rear = NULL;   //kuyrugun sonu

int main()
{
    //yigit olusturma, ilk deger atama
    struct stack mystack;
    mystack.top = -1;   //baslangic degeri
    
 int selection,tmp;
 while (1)
 {
  printf("*** *** ***\n");
  printf("      1    -->    Yigita  Eleman  Ekle           \n");
  printf("      2    -->    Elemani Kuyruga Tasi           \n");
  printf("      3    -->    Yigiti  Goruntule              \n");
  printf("      4    -->    Kuyrugu Goruntule              \n");
  printf("      5    -->    EXIT           \n");
  printf("*** *** ***\n");

  printf("Seciminizi girin: ");
  scanf("%d", &selection);
  
  switch (selection) {
  case 1:
   tmp = 0;
   printf("Eklenecek eleman:");
   scanf("%d", &tmp);
   push(&mystack, tmp);
   break;
  case 2:
   tmp = pop(&mystack);
   if (tmp == -1)//stack bos
                //detay icin pop fonskyionunun hangi durumda -1 dondugune bakin
    printf("Yigitta eleman olmadigindan kuyruga eklenemiyor!\n");
   else
    insertQueue(tmp);
   break;
  case 3:
   displayStack(&mystack);
   break;
  case 4:
   displayQueue();
   break;
  case 5:
   return 0;
  }
 }
 return 0;
}

//FONKSIYONLAR
//kuyruk fonksiyonlari
void displayQueue() {
 struct qnode *ptr = front;

 if (isEmpty() == 1)//listede eleman yok
  return;

 //else kismi
    printf("\n *** QUEUE *** \n");
 printf("[ ");
 while (ptr != NULL) {
  printf("%d ", ptr->data);
  ptr = ptr->next;
 }
 printf(" ]\n");

}

void insertQueue(int data) {
 //bellekte yer tutma
    struct qnode *ptr = (struct qnode*) malloc(sizeof(struct qnode));
 if (ptr == NULL) {
  printf("Bellekte yeterli alan yok !\n");
  return;
 }
    //node olusturma
 ptr->data = data;
 ptr->next = NULL;

    //node u kuyruga ekleme
 if (front == NULL) //ilk qnode
  front = rear = ptr;
 else {
  rear->next = ptr;
  rear = ptr;
 }
}

int isEmpty() {
 if (front == NULL) {
  printf("Kuyrukta hic eleman yok !\n");
  return 1;
 }
 else
  return 0;
}

//////////////////////*** *** ***//////////////////////

//yigit fonksiyonlari
void push(struct stack *p, int x) {
 if (p->top == MAXSIZE - 1) {   //stack dolu mu kontrolu
  printf("Stack tamamen dolu, eleman eklenemiyor\n");
  return;
 }
 else {  //stackte yer var, eleman eklenebilir
  (p->top)++;  //indeksi guncelle
  p->arr[p->top] = x;    //elemani yazdi
 }
 return;
}
int pop(struct stack *p) {
 int tmp;
 if (p->top == -1) {
  printf("Stack bos\n");
  return -1;
 }
 else {  //stackte elemean var
  tmp = p->arr[p->top];     //stackte en üstteki eleman
  printf("'%d' stackten cikarildi\n", tmp);
  p->arr[p->top] = 0;
  (p->top)--;
 }
 return(tmp);
}

void displayStack(struct stack *p) //stack deki elemanlari ekrana basan fonksiyon
{
 int i;
 if (p->top == -1)
 {
  printf("Stackte goruntulenecek eleman yok !\n");
  return;
 }
 else
 {
  printf("\n *** STACK *** \n");
  for (i = p->top; i >= 0; i--)
   printf("%d\n", p->arr[i]);
 }
 printf("\n");
}


Yorumlar

Popüler Yayınlar