hello everyone i am trying to create a code to represent a queue using a linked list but i get the disturbing "Segmentation fault coredumped" after compilation any help plese thist are the three parts of the code
Code:
#ifndef QUEUE_H
#define QUEUE_H
#include <stdbool.h>
typedef int Item;
typedef struct queue_type *Queue;
typedef struct node *return_node;
Queue create(void);
void insert(Queue fxn, Item x);
Item remove_q(Queue fxn);
return_node return_first(Queue fxn);
return_node return_last(Queue fxn);
bool is_empty(Queue fxn);
void terminate(char *message);
#endif
This is the function definations
Code:
#include<stdio.h>
#include<stdlib.h>
#include "queue.h"
struct node{
Item *p;
struct node *next;
};
struct queue_type{
struct node *first;
struct node *last;
};
Queue create(void)
{
Queue fxn = malloc (sizeof(struct queue_type));
if(fxn==NULL){
terminate("\nError in create: ");
exit(EXIT_FAILURE);
}
fxn->first=NULL;
fxn->last=NULL;
return fxn;
}
void insert (Queue fxn, Item x)
{
struct node *new_node = malloc(sizeof(struct node));
if(new_node==NULL){
terminate("Error in insert:");
exit(EXIT_FAILURE);
}
new_node->p = malloc(sizeof(x));
if(new_node->==NULL){
terminate("Error in allocating size for new node pointer");
exit(EXIT_FAILURE);
}
new_node->p = &x;
new_node->next = NULL;
if(fxn->first==NULL){
fxn->first = new_node;
}
else{
struct node *old_last;
old_last=fxn->last;
old_last->next=new_node;
fxn->last=new_node;
}
}
Item remove_q (Queue fxn)
{
struct node *old_first;
Item i;
old_first=fxn->first;
i = *(old_first->p);
fxn->first=old_first->next;
free(old_first);
return i;
}
return_node return_first(Queue fxn)
{
return fxn->first;
}
return_node return_last(Queue fxn)
{
return fxn->last;
}
bool is_empty(Queue fxn)
{
return fxn->last == NULL;
}
void terminate(char *message)
{
printf("\n%s",message);
exit(EXIT_FAILURE);
}
This is a sample to test the code
Code:
#include<stdio.h>
#include "queue.h"
int main(void)
{
printf("Create succeded");
Queue s1,s2;
int n;
printf("Create succeded");
s1=create();
s2=create();
printf("Create succeded");
insert (s1,1);
insert (s1,2);
insert (s1,3);
insert (s1,4);
insert (s2,5);
int i;
for(i=0;i<3;i++){
printf("Popped %d from s1\n",remove_q(s1));
}
printf("Poooed %d from s2\n",remove_q(s2));
if(is_empty(s1)){
printf("s1 is empty\n");
}
if(is_empty(s2)){
printf("s2 is empty\n");
}
}