User Tools

Site Tools


user:bkenne11:portfolio:libque

Project: Queue library implementation

A project for Data Structures by Brandon Kennedy during the Fall 2011 Semester.

This project was begun on 10/14/2011 and was completed on 10/17/2011.

Objectives

The purpose of this project is to pursue a better understanding of Queue's and their uses. I hope to walk away with a better understanding of the structure of a queue, the functionality of enqueueing and dequeueing, and library creation/use.

Prerequisites

In order to successfully accomplish/perform this project, the listed resources/experiences need to be consulted/achieved:

  • Basic understanding of queue's
  • Basic understanding of library creation and execution
  • The C programming guide
  • Matt Haas

Background

The idea of this project is to create the queue functions enqueue and dequeue, and implement them in a function. To make this project a little more fun, i will include a headerfile(that has a node struct in it) in the header file of my queue functions so that i can reference that headerfile in order to create nodes. I will also create a queue struct that contains the head and tail of the queue.

Scope

I will be implementing these queue functions to contain character data. My main function will create a list with given values, and will then prompt to either enqueue or dequeue, and prompt for a value accordingly. The main function will then print out the resulting queue and exit.

Functions used:

  • Enqueue - add a node to the front
  • Dequeue - remove a node from the end

Attributes

State and justify the attributes you'd like to receive upon successful approval and completion of this project.

  • Queue attribute: this function will implement a queue
  • Linked list: This project will implement a linked list.
  • Doubly linked list: this project will not only implement a linked list, but a doubly linked list
  • pointer: this project will use pointers
  • Libraries: This project will implement non-core libraries

Code

Main

#include"quelist.h"
int main()
{
        char input;
        char junk;
        int choice;
        int i=0;
 
        Queue *myqueue1;
        myqueue1 = (Queue *) malloc (sizeof(Queue));
        myqueue1 -> head = myqueue1 -> tail = myqueue1 -> tmp = NULL;
 
        printf("Enter a character, (# to exit): ");
        scanf("%c", &input);
 
        while(input != '#')
        {
                if(myqueue1 -> head == NULL)
                {
                        myqueue1 -> head = (Node *) malloc (sizeof(Node));
                        myqueue1 -> tail = myqueue1 -> head;
                        myqueue1 -> tail -> next = NULL;
                        myqueue1 -> head -> prev = NULL;
                        myqueue1 -> tmp = myqueue1 -> head;
                        myqueue1 -> head -> value = input;
                }
                else
                {
                        enqueue(myqueue1, input);
                }
                scanf("%c", &junk);
                printf("Enter a character, (# to exit): ");
                scanf("%c", &input);
        }
        printf("To enqueue a node, enter 1 \n");
        printf("To dequeue a node, enter 2 \n: ");
        scanf("%d", &choice);
        if(choice == 1)
        {
                scanf("%c", &junk);
                printf("Enter a character, (# to exit): ");
                scanf("%c", &input);
 
                enqueue(myqueue1, input);
        }
        else if(choice == 2)
        {
                printf("You removed node memory address [0x%x]\n", dequeue(myqueue1));
        }
        else
        {
                printf("Wrong choice, %d was not an option\n", input);
                exit(1);
        }
        myqueue1 -> tmp = myqueue1 -> head;
        i=0;
        while(myqueue1 -> tmp != NULL)
        {
                printf("[%d] value: %c \n", i, myqueue1 -> tmp -> value);
                i++;
                myqueue1 -> tmp = myqueue1 -> tmp -> next;
        }
        return 0;
}

Enqueue

/*
This is a simple function to enqueue a node to a queue.
Accepts: A que struct containing the head, tail and a tmp node of the queue,  and a character value.
Returns: nothing
Requires the "linkedlist.h" header file, which is in "quelist.h"
*/
#include"quelist.h"
 
void enqueue(Queue *que, char val)
{
        Node *tmp1;
        tmp1 = (Node *) malloc (sizeof(Node));
        tmp1 -> value = val;
        que -> head -> prev = tmp1;
        tmp1 -> next = que -> head;
        que -> head = que -> head -> prev;
}

Dequeue

/*
Deueue is a simple program to dequeue a node from a list.
Node *dequeue(Queue *)
Accepts: a queue struct
Returns: the dequeued node
*/
#include"quelist.h"
 
Node *dequeue(Queue *que)
{
        que -> tmp = que -> tail;
        if(que -> tail != que -> head)
        {
                que -> tail = que -> tail -> prev;
                que -> tmp -> prev = NULL;
                que -> tail -> next = NULL;
        }
        return (que -> tmp);
}

Header File

#ifndef QUE_LIST_H
#define QUE_LIST_H
#include"linkedlist.h"
 
struct queue{
        struct node *head;
        struct node *tail;
        struct node *tmp;
};
typedef struct queue Queue;
 
Node *dequeue(Queue *);
void enqueue(Queue *, char);
 
#endif

Execution

Again, if there is associated code with the project, and you haven't already indicated how to run it, provide a sample run of your code:

lab46:~/src/DataS/Project2$ ./mainque
Enter a character, (# to exit): f
Enter a character, (# to exit): 4
Enter a character, (# to exit): @
Enter a character, (# to exit): &
Enter a character, (# to exit): 7
Enter a character, (# to exit): j
Enter a character, (# to exit): ;
Enter a character, (# to exit): #
To enqueue a node, enter 1 
To dequeue a node, enter 2 
: 1
Enter a character, (# to exit): e
[0] value: e 
[1] value: ; 
[2] value: j 
[3] value: 7 
[4] value: & 
[5] value: @ 
[6] value: 4 
[7] value: f 
lab46:~/src/DataS/Project2$ ./mainque
Enter a character, (# to exit): f
Enter a character, (# to exit): 5
Enter a character, (# to exit): @
Enter a character, (# to exit): 5
Enter a character, (# to exit): b
Enter a character, (# to exit): #
To enqueue a node, enter 1 
To dequeue a node, enter 2 
: 2
You removed node memory address [0x2433030]
[0] value: b 
[1] value: 5 
[2] value: @ 
[3] value: 5 
lab46:~/src/DataS/Project2$ 

Reflection

Though this project did not make a substantial impact, i still was able to take away a few key things. Queue's are useful because of how little is involved in they're code, they are short sweet and to the point.

References

No references were needed.

user/bkenne11/portfolio/libque.txt · Last modified: 2011/11/18 19:56 by bkenne11