From 4c4ba6bcd8717c54a131150e543b44654236acdc Mon Sep 17 00:00:00 2001 From: Moustafa Attia Date: Thu, 7 Dec 2017 14:03:20 +0200 Subject: [PATCH 1/3] Add files via upload --- LinkedQueue.cpp | 116 ++++++++++++++++++++++++++++++++++++++++++++++++ LinkedQueue.h | 32 +++++++++++++ Test Queue.cpp | 68 ++++++++++++++++++++++++++++ 3 files changed, 216 insertions(+) create mode 100644 LinkedQueue.cpp create mode 100644 LinkedQueue.h create mode 100644 Test Queue.cpp diff --git a/LinkedQueue.cpp b/LinkedQueue.cpp new file mode 100644 index 0000000..6b5e4ce --- /dev/null +++ b/LinkedQueue.cpp @@ -0,0 +1,116 @@ +#include +#include"LinkedQueue.h" + +/* This is implemention level */ + +void CreateQueue(Queue *pq) +{ + pq->front = NULL; + pq->rear = NULL; + pq->size = 0; +} + +void Append(QueueEntry e , Queue *pq) +{ + QueueNode *pn = (QueueNode*)malloc( sizeof(QueueNode) ); + pn->next = NULL; + pn->entry = e; + if(!pq->rear) + pq->front = pn; + else + pq->rear->next = pn; + pq->rear = pn; + pq->size++; +} + +void Serve(QueueEntry *pe , Queue *pq) +{ + QueueNode *pn = pq->front; + *pe = pn->entry; + pq->front = pn->next; // change it to pq->front = pq->front->next + free(pn); + if(!pq->rear) + pq->rear = NULL; + pq->size--; +} + +int QueueEmpty(Queue *pq) +{ + return !pq->front; // try to to change it to pq->rear +} + +int QueueFull(Queue *pq) +{ + return 0; +} + +int QueueSize(Queue *pq) +{ + return pq->size; +} + +void ClearQueue(Queue *pq) +{ + while(pq->front){ + pq->rear = pq->front->next; + free(pq->front); + pq->front = pq->rear; + } + pq->size = 0; +} + +void TraverseQueue(Queue *pq , void(*pf)(QueueEntry)) +{ + QueueNode *pn; + for(pn=pq->front; pn; pn=pn->next) + (*pf)(pn->entry); +} + +QueueEntry LastElement(Queue *ps) +{ + return ps->rear->entry; +} + +QueueEntry LastElementRemoved(Queue *ps) +{ + QueueNode *pn; + QueueEntry result; + result = ps->rear->entry; + pn = ps->front; + if(pn->next == NULL){ + result = pn->entry; + free(pn); + ps->front = NULL; + return result; + } + else + { + while(pn->next->next != NULL) + { + pn = pn->next; + } + + free(ps->rear); + ps->rear = pn; + ps->rear->next = NULL; + ps->size--; + } + return result; +} + +QueueEntry FirstElement(Queue *ps) +{ + return ps->front->entry; +} + +int QueueSizee(Queue *s) +{ + int result = 0; + QueueNode *pn; + pn = s->front; + while(pn){ + result++; + pn = pn->next; + } + return result; +} \ No newline at end of file diff --git a/LinkedQueue.h b/LinkedQueue.h new file mode 100644 index 0000000..632ee0c --- /dev/null +++ b/LinkedQueue.h @@ -0,0 +1,32 @@ + +typedef char QueueEntry; + +typedef struct queuenode{ + QueueEntry entry; + struct queuenode *next; +}QueueNode; + +typedef struct queue{ + QueueNode *front; + QueueNode *rear; + int size; +}Queue; + + + + +void CreateQueue(Queue *); +void Append(QueueEntry , Queue *); +void Serve(QueueEntry * , Queue *); +int QueueEmpty(Queue *); +int QueueFull(Queue *); +int QueueSize(Queue *); +void ClearQueue(Queue *); +void TraverseQueue(Queue * , void(*pf)(QueueEntry)); +QueueEntry LastElement(Queue *ps); +QueueEntry LastElementRemoved(Queue *ps); +QueueEntry FirstElement(Queue *ps); +void DestroyQueue(Queue *ps); +void CopyQueue(Queue *src,Queue *dest); +int QueueSize(Queue *s); +int QueueSizee(Queue *s); diff --git a/Test Queue.cpp b/Test Queue.cpp new file mode 100644 index 0000000..b110664 --- /dev/null +++ b/Test Queue.cpp @@ -0,0 +1,68 @@ +#include +#include"LinkedQueue.h" + + +/* This is user level */ + +void PrintQueue(QueueEntry pe) +{ + printf("%c <--",pe); +} + + +int main() +{ + printf("********************************************\n" + "This Queue is just for CHAR onlyyyyyyyy \n" + "********************************************\n"); + Queue q; + int j = 0; + QueueEntry e; + char arr[10] = {'A','B','C','D','E','F','G','H','I','J'}; + CreateQueue(&q); + + for(int i=0; i<10; i++) + { + e = arr[i]; + Append(e,&q); + TraverseQueue(&q , &PrintQueue); + putchar('\n'); + } + + printf("_______________________________________________________\n"); + printf("The orignal Queue is like that : \n"); + TraverseQueue(&q , &PrintQueue); + putchar('\n'); + printf("_______________________________________________________\n"); + printf("The first element in the queue is %c: \n",FirstElement(&q)); + putchar('\n'); + + + while(!QueueEmpty(&q)) + { + Serve(&e , &q); + printf("After we Serve the elemnt number %d\n",(10-j)); + TraverseQueue(&q , &PrintQueue); + putchar('\n'); + printf("The element e = '%c'\n",e); + printf("******\nThe Size of Queue now is : %d\n", QueueSize(&q)); + printf("_______________________________________________________\n"); + j++; + } + + QueueEntry item = NULL; + Queue write; + CreateQueue(&write); + + while(item != '\n') + { + Append(item , &write); + scanf("%c",&item); + } + printf("__________________________________________________\n"); + TraverseQueue(&write , &PrintQueue); + + putchar('\n'); + + return 0; +} From 8082f74275aeaf5edc5c0ff4497075eebc8bd5cd Mon Sep 17 00:00:00 2001 From: Moustafa Attia Date: Thu, 7 Dec 2017 14:04:03 +0200 Subject: [PATCH 2/3] Update README.md --- README.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/README.md b/README.md index 06ae94c..0b0abaf 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,2 @@ ## DataStructures -This repository for my implemented data structure using C -I write this code when I was in college second grade at 2010 in data structure course - -+ [Stack data structure pointer based using C](https://github.com/MoustafaAttia/DataStructures/tree/StackPointerBased) -+ [Stack data structure array based using C](https://github.com/MoustafaAttia/DataStructures/tree/StackArrayBased) -+ [Queue data structure array based using C](https://github.com/MoustafaAttia/DataStructures/tree/QueueArrayBased) +### Queue using pointer based in C language From 719c6a984050a54a3738686169f1738986dad9e6 Mon Sep 17 00:00:00 2001 From: Moustafa Attia Date: Thu, 7 Dec 2017 14:05:13 +0200 Subject: [PATCH 3/3] Update Test Queue.cpp --- Test Queue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Test Queue.cpp b/Test Queue.cpp index b110664..49aba38 100644 --- a/Test Queue.cpp +++ b/Test Queue.cpp @@ -13,7 +13,7 @@ void PrintQueue(QueueEntry pe) int main() { printf("********************************************\n" - "This Queue is just for CHAR onlyyyyyyyy \n" + "This Queue is just for CHAR only \n" "********************************************\n"); Queue q; int j = 0;