User Tools

Site Tools


user:kkrauss1:portfolio:stack_library

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
user:kkrauss1:portfolio:stack_library [2011/12/12 20:25] – [Code] kkrauss1user:kkrauss1:portfolio:stack_library [2011/12/12 20:27] (current) – [Code] kkrauss1
Line 1: Line 1:
 +======Project: Stack library======
 +
 +A project for C/C++, Data Structures, and System Programming by Karl Krauss for fall 2011.
 +
 +Approximately 3 hours including taking the time to full grasp all concepts that were used, this was much simpler than doubly linked list as the "hard" parts had been figured out already.
 +
 +=====Objectives=====
 +The purpose of this project was to create a library for stacks.
 +
 +=====Prerequisites=====
 +In order to successfully accomplish/perform this project, the listed resources/experiences need to be consulted/achieved:
 +
 +  * understand functions
 +  * understand pointers
 +  * understand structs
 +  * understand malloc()
 +
 +=====Background=====
 +
 +This was the next evolution of the doubly linked list library.  This is the stack library, taking what I learned from implementing the dl library this was much simpler.
 +
 +=====Attributes=====
 +
 +====Cprog attributes====
 +
 +  * variables
 +  * pointers 
 +  * selection 
 +  * i/o 
 +  * repetition 
 +  * functions 
 +  * structures 
 +  * libraries
 +====Data Structures====
 +  * Pointers
 +  * Malloc/new
 +  * linked list
 +  * Doubly linked list
 +  * Libraries
 +
 +====Systems programming====
 +  * Terminal I/O
 +
 +=====Code=====
 +This is the header file: 
 +<code c>
 +#ifndef STACK_H
 +
 +#define      STACK_H
 +
 +
 +
 +
 +
 +struct node { //predefined structure with one variable (
 +
 + int value;
 +
 + struct node *next;
 +
 + struct node *prev;
 +
 +};
 +
 +typedef struct node Node;
 +
 +
 +
 +struct stack {// predefined structure for use of returns in functions allow for easy access to stack.  *end is top of stack
 +
 + Node *start;
 +
 + Node *end;
 +
 +};
 +
 +typedef struct stack Stack;
 +
 +
 +
 +Stack *push(Stack *myStack, int input);
 +
 +Node *pop(Stack *myStack);
 +
 +Node *peek(Stack *myStack);
 +
 +
 +
 +
 +
 +
 +
 +//minimum variables needed in main: int input, Node *tmp, Node *tmp2, List *myList.
 +
 +
 +
 +#endif
 +</code>
 +
 +This is the code:
 +<code c>
 +typedef struct list List;
 +
 + in List: * start will be the stack and *end the top of the stack.
 +
 +*/
 +List *push(List *myList, Node *tmp, int input);
 +List *pop(List *myList, Node *tmp, int i);
 +void peek(List *myList);
 +int main()
 +{
 +
 + List *myList;
 + //Node *stack, *top
 + Node *tmp;
 + int i=0, input;
 +
 + //tmp = stack = top = NULL;
 + myList=(List *)malloc(sizeof(List));
 + myList->start =myList->end = tmp = NULL;
 +
 + printf("Please enter a value (-1 to stop): ");//puts kept printing a new line
 +
 + scanf("%d", &input);
 +
 + while (input != -1)
 + {
 + push(myList, tmp, input);
 + i++;
 + printf("Please enter a value (-1 to stop): ");
 + scanf("%d", &input);
 +
 + }
 +
 + peek(myList);
 + getchar();
 + getchar();
 + while (i != 0)//tmp = (Node *)pop(myList, tmp, i)) != NULL) 
 + {
 +
 + myList=pop(myList, tmp, i);
 + i--;
 + }
 +
 + return 0;
 +}
 +
 +List *push(List *myList, Node *tmp, int input)// pushing a new value onto the top of the stack
 +{
 + myList = newNode(myList, tmp, input);
 +
 + return myList;
 +}
 +
 +List *pop(List *myList, Node *tmp, int i)// popping value off the top of the stack
 +{
 +
 + int x;
 + tmp = myList->start;
 +
 + for(x=1; x<i; x++)
 + {
 + tmp = tmp->next;
 + }
 +
 + printf("value: %d\n", tmp -> value);
 + deleteNode(myList, tmp, i);
 +
 + return myList;
 +}
 +
 +void peek(List *myList)// checking to see whats on the top of the stack
 +{
 + if(myList->start == NULL)
 + {
 + printf("The stack is empty\n");
 + }
 + else
 + {
 + printf("THe value at the top of the stack is: %d\n", myList->end->value);
 + }
 +}
 +</code>
 +
 +=====Reflection=====
 +  *As with doubly linked lists,  I really learned a lot.  This library was written quite some time ago and the best part is when I came back to it, I had learned enough to realize I could vastly improve upon it. Something I will possibly do in the future.