Go4Expert

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

fame ndongo 25Aug2008 19:35

implementing stack using a double linked list
 
hi,please i need help on emergency on the following program that will implement stack in using a double linked list,here's the program that i 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;
  }

}

thank you too much for yoour help.

shabbir 25Aug2008 20:41

Re: implementing stack using a double linked list
 
Moved to C-C++ forum for better responses.

xpi0t0s 25Aug2008 23:02

Re: implementing stack using a double linked list
 
What emergency help do you need? What is the program not doing that you want it to, or doing that you don't want it to? It's generally impossible to determine the answers to these questions just by looking at the code, so stating exactly what you want gives us somewhere to start rather than just looking at the code and guessing.


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