Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   implementing a stack by using a double linked list (http://www.go4expert.com/forums/implementing-stack-using-double-linked-t13260/)

fame ndongo 25Aug2008 21:24

implementing a stack by using a double linked list
 
please,is there anybody who could help me urgently to implement a stack by using two ways linked list. here's the program that i have tried to do:

Code:

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

#define Stack_size 5
#define Queue_size 5

void stack();
void queue();
void insert_stack(int n);
void output_stack();
int delete_stack();

void insert_queue(int n);
void output_queue();
int delete_queue();
void cir_queue();

void insert_cir_queue(int n);
void output_cir_queue();
int delete_cir_queue();
void cir_cir_queue();


int STACK[Stack_size];
int QUEUE[Queue_size];
int CIR_QUEUE[Queue_size];


int top;
int front,rear;
int cir_front,cir_rear;


int main()
{
  char ch;
  top=0;
  front=0;
  rear=0;
  cir_front=0;
  cir_rear=0;


  clrscr();

  do{
  start:
      printf("\n\nPress\n\n");
      printf("(1) for stack operation.\n");
      printf("(2) for queue operation.\n");
      printf("(3) for circular queue operation.\n");
      printf("(4) for exit.\n");

      ch=getch();

      switch(ch)
      {
      case '1': stack();
                break;

      case '2': queue();
                break;

      case '3': cir_queue();
                break;

      case '4': exit(0);
                break;
      }

  }while(1);


 return 0;
}


void stack()
{
  char ch;
  int n;
  do{
      printf("\n\nPress\n\n");
      printf("(1) to insert number in the stack.\n");
      printf("(2) to delete number in the stack.\n");
      printf("(3) to exit operation\n\n");

      ch=getch();

      switch(ch)
      {
      case '1': printf("insert the number.\n");
                scanf("%d",&n);
                insert_stack(n);
                output_stack();
                break;


      case '2': n=delete_stack();
                if(n==-999)
                  printf("Underflow situation has come.\n");
                else{
                  printf("%d is deleted from the stack",n);
                  output_stack();
                  }
                break;


      case '3': return;


      }




  }while(1);

}




void queue()
{
  char ch;
  int n;

  do{
      printf("\n\nPress\n\n");
      printf("(1) to insert number in the queue.\n");
      printf("(2) to delete number in the queue.\n");
      printf("(3) to exit operation\n\n");

      ch=getch();

      switch(ch)
      {
      case '1': printf("insert the number.\n");
                scanf("%d",&n);
                insert_queue(n);
                output_queue();
                break;


      case '2': n=delete_queue();
                if(n==-999)
                  printf("Underflow situation has come.\n");
                else{
                  printf("%d is deleted from the queue",n);
                  output_queue();
                  }
                break;


      case '3': return;


      }

      }while(1);




}



void insert_stack(int n)
{
    if(top==Stack_size)
      printf("Overflow situation has occured.\n");

    else{
        STACK[top]=n;
        top++;
        }
}

int delete_stack()
{
  int number;

  if(top==NULL){
    return -999;
    }

  else{
  number=STACK[--top];
  return number;
  }


}

void output_stack()
{

  printf("\n\nStack status.\n\n");

  for(int i=0;i<top;i++)
  printf("%d\t",STACK[i]);

}

void insert_queue(int n)
{
  if(rear==Queue_size)
    printf("Overflow situation.\n");
  else{
    QUEUE[rear]=n;
    rear++;
  }

}

void output_queue()
{

  printf("\n\nQueue status.\n\n");

  for(int i=front;i<rear;i++)
  printf("%d\t",QUEUE[i]);

}


int delete_queue()
{
  int number;

  if(front==rear){
    return -999;
    }

  else{
  number=QUEUE[front++];
  return number;
  }
}

void cir_queue()
{
  char ch;
  int n;

  do{
      printf("\n\nPress\n\n");
      printf("(1) to insert number in the circular queue.\n");
      printf("(2) to delete number in the circular queue.\n");
      printf("(3) to exit operation\n\n");

      ch=getch();

      switch(ch)
      {
      case '1': printf("insert the number.\n");
                scanf("%d",&n);
                insert_cir_queue(n);
                output_cir_queue();
                break;


      case '2': n=delete_cir_queue();
                if(n==-999)
                  printf("Underflow situation has come.\n");
                else{
                  printf("%d is deleted from the queue",n);
                  output_cir_queue();
                  }
                break;


      case '3': return;

      }
    }while(1);

}

void insert_cir_queue(int n)
{


  if((cir_front>cir_rear)&&((cir_front-cir_rear)==1)||(cir_front==0&&cir_rear==Queue_size))
    printf("Overflow situation.\n");

  else
  {
    if((cir_rear==Queue_size)&&(cir_front!=0))
      cir_rear=0;

      CIR_QUEUE[cir_rear]=n;
      printf("Front =%d rear =%d\n",cir_front,cir_rear);
      cir_rear++;

  }

}

void output_cir_queue()
{
  int i;
  printf("\n\nCircular Queue status.\n\n");

  if(cir_rear>=cir_front){
    for(i=cir_front;i<cir_rear;i++)
    printf("%d\t",CIR_QUEUE[i]);
  }
  else{


    for(i=cir_front;i<Queue_size;i++)
    printf("%d\t",CIR_QUEUE[i]);

    for(i=0;i<cir_rear;i++)
    printf("%d\t",CIR_QUEUE[i]);


    }



}


int delete_cir_queue()
{
  int number;

  if(cir_front==cir_rear){
    return -999;
    }

  else
  {
  if ((cir_front==Queue_size)&&(cir_rear!=0))
    cir_front=0;

    number=CIR_QUEUE[cir_front++];
    printf("Front =%d rear =%d\n",cir_front,cir_rear);


    return number;
  }

}

thanks a lot.

shabbir 25Aug2008 22:28

Re: implementing a stack by using a double linked list
 
Duplicate of implementing a stack by using a double linked list. Thread closed. Please do not create the same thread over and over again.


All times are GMT +5.5. The time now is 12:12.