Lists, Stacks and Queues in C

Slides:



Advertisements
Similar presentations
Stacks, Queues, and Linked Lists
Advertisements

Stack and Queues using Linked Structures Kruse and Ryba Ch 4.
Data Structure HKOI training /4/2010 So Pak Yeung.
Senem Kumova Metin Spring2009 STACKS AND QUEUES Chapter 10 in A Book on C.
Chapter 6 Structures By C. Shing ITEC Dept Radford University.
Data Structures Lecture 13: QUEUES Azhar Maqsood NUST Institute of Information Technology (NIIT)
Review of Stacks and Queues Dr. Yingwu Zhu. Our Focus Only link-list based implementation of Stack class Won’t talk about different implementations of.
Elementary Data Structures CS 110: Data Structures and Algorithms First Semester,
CS Data Structures II Review COSC 2006 April 14, 2017
Chapter 13 Pointers and Linked Lists. Nodes and Linked Lists Linked list: A sequence of nodes in which each node is linked or connected to the node preceding.
E.G.M. Petrakisstacks, queues1 Stacks  Stack: restricted variant of list  elements may by inserted or deleted from only one end : LIFO lists  top: the.
Chapter 12 C Data Structures Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc. and Pearson Education Inc.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Chapter 12 – Data Structures Outline 12.1Introduction.
1 Stack Data : a collection of homogeneous elements arranged in a sequence. Only the first element may be accessed Main Operations: Push : insert an element.
Objectives of these slides:
DS.L.1 Lists, Stacks, and Queues (Review) Chapter 3 Overview Abstract Data Types Linked Lists, Headers, Circular Links Cursor (Array) Implementation Stacks.
Chapter 12 Data Structure Associate Prof. Yuh-Shyan Chen Dept. of Computer Science and Information Engineering National Chung-Cheng University.
Review 1 Introduction Representation of Linear Array In Memory Operations on linear Arrays Traverse Insert Delete Example.
DATA STRUCTURES AND ALGORITHMS Lecture Notes 4 Prepared by İnanç TAHRALI.
1 C++ Plus Data Structures Nell Dale Chapter 4 ADTs Stack and Queue Modified from the slides by Sylvia Sorkin, Community College of Baltimore County -
1 Chapter 7 Stacks and Queues. 2 Stack ADT Recall that ADT is abstract data type, a set of data and a set of operations that act upon the data. In a stack,
Data Structures (part 2). Stacks An Everyday Example Your boss keeps bringing you important items to deal with and keeps saying: “Put that last ‘rush’
1 Stacks and Queues Based on D.S. Malik, Java Programming: Program Design Including Data Structures.
CSC2100B Tutorial 2 List and stack implementation.
Lists, Stacks and Queues in C Yang Zhengwei CSCI2100B Data Structures Tutorial 4.
Stacks And Queues Chapter 18.
1 Linked-list, stack and queue. 2 Outline Abstract Data Type (ADT)‏ Linked list Stack Queue.
Review of Stacks and Queues Dr. Yingwu Zhu. How does a Stack Work? Last-in-First-out (LIFO) data structure Adding an item Push operation Removing an item.
Computer Science Department Data Structures and Algorithms Queues Lecture 5.
Data Structures. Abstract Data Type A collection of related data is known as an abstract data type (ADT) Data Structure = ADT + Collection of functions.
2005MEE Software Engineering Lecture 7 –Stacks, Queues.
1 Midterm 1 on Friday February 12 Closed book, closed notes No computer can be used 50 minutes 4 questions Write a function Write program fragment Explain.
 In general, Queue is line of person waiting for their turn at some service counter like ticket window at cinema hall, at bus stand or at railway station.
Dale Roberts Department of Computer and Information Science, School of Science, IUPUI CSCI 240 Abstract Data Types Queues Dale Roberts, Lecturer
CSCE 3110 Data Structures & Algorithm Analysis
STACKS & QUEUES for CLASS XII ( C++).
Elementary Data Structures
Chapter 12 – Data Structures
Dynamic Allocation Review Structure and list processing
Stacks and Queues Chapter 4.
CC 215 Data Structures Queue ADT
Abstract Data Types.
UNIT – I Linked Lists.
12 C Data Structures.
Data Structures and Algorithms
Queue data structure.
Stacks and Queues.
Stacks.
Stack and Queue APURBO DATTA.
CSCE 3110 Data Structures & Algorithm Analysis
Stacks Stack: restricted variant of list
Stack.
CSCE 3110 Data Structures & Algorithm Analysis
Stack and Queue.
CMSC 341 Lecture 5 Stacks, Queues
CSC215 Homework Homework 11 Due date: Dec 19, 2016.
Stack ADT & Modularity 2 implementations of the Stack abstract data type: Array Linked List Program design: modularity, abstraction and information hiding.
Chapter 16-2 Linked Structures
CSCE 3110 Data Structures & Algorithm Analysis
Cs212: Data Structures Computer Science Department Lab 7: Stacks.
CSC 143 Queues [Chapter 7].
Stacks and Queues CSE 373 Data Structures.
Data Structures and Algorithms
Mutable Data (define mylist (list 1 2 3)) (bind ((new (list 4)))
CSE 373 Data Structures Lecture 6
17CS1102 DATA STRUCTURES © 2016 KL University – The contents of this presentation are an intellectual and copyrighted property of KL University. ALL RIGHTS.
CSE 373 Data Structures Lecture 6
Stacks, Queues, and Deques
CSCS-200 Data Structure and Algorithms
Structures and List Processing
Presentation transcript:

Lists, Stacks and Queues in C Zhang Hongyi CSCI2100B Data Structures Tutorial 5

Outline Structure Linked List Overview Implementation Stack Queue

Structure A collection of values (members) struct time { int hh; Like a class in java or c++, but without methods and access controls (private, protected, public.) struct time { int hh; int mm; int ss; }; … struct time t1; t1.hh = 20; t1.mm=12; t1.ss=30;

Structure We can also use pointer to structure struct time { int hh; int mm; int ss; }; struct time* t1; (*t1).hh=20; Pointer to structure is very common. The above is equivalent to: t1->hh = 20; // same as (*t1).hh=20;

Some words about typedef Allow us to define alias for a data type: typedef int My_integer_type; My_interger_type x =3; Tpedef can be used for structures: typedef struct time { int hh; int mm; int ss; }Time_type; Time_type t1; t1.hh = 12;

Dynamic Memory Allocations We can allocate memory at run time using malloc malloc can be used to allocate a piece of memory of the specified size, and returns a pointer to it. Example: Time_type *t1; t1 = (Time_type*)malloc(sizeof(Time_type)); Allocate enough memory for storing a Time_type variable (which is a structure). Return a pointer to it. Cast it to a pointer to Time_type, and assign it to t1.

Dynamic Memory Allocations Use free to de-allocate the memory when it is no longer needed. This is important because there is no garbage collection in C. So you will run out of memory if you keep allocating without de-allocating. (“Memory Leak”) Time_type *t1; t1 = (Time_type*)malloc(sizeof(Time_type)); … t1->hh = 12; free(t1); //de-allocate when we no longer need it.

Linked List Overview A list of structures (nodes) Each structure contains Element (to store data) Pointer to next structure Insert() Delete() Print()

Linked List Implementation struct node_s { int data; struct node_s *next; }; typedef struct node_s node; //To create a node variable node anode; //static, allocate in compile time or node *anode = (node*)malloc(sizeof(node)); //dynamic allocation

Linked List Implementation Link two nodes together node a,b; a.next = &b; b.next = NULL; //use pointer node* a, *b; a = (node*)malloc(sizeof(node)); b = (node*)malloc(sizeof(node)); b->next = NULL; a->next = b;

Linked List Implementation Insert a node to a list node a,b,c; c.next = NULL; //originally, only a and c a.next = &c; //insert b between a and c b.next = &c; a.next = &b;

Linked List Implementation Delete a node from a list node a,b,c; c.next = NULL; //orginial a.next = &b; b.next = &c; //remove b from the list a.next = &c;

Stack books on your table?

Stack Overview Last In First Out (LIFO) Push() Pop() Top() is_empty()

Stack Implementation Can be implemented by linked list or array Create an empty stack node *create_stack() { node* emptyStack; emptyStack = (node*)malloc(sizeof(node)); emptyStack->next = NULL; return emptyStack; }

Stack Implementation Push an entry into the stack void Push(int inputdata, node *stack) { node* newnode = (node*)malloc(sizeof(node)); newnode->data = inputdata; newnode->next = stack->next; //should be first stack->next = newnode; //how about change the above //2 lines? }

Stack Implementation Pop an entry from the stack int Pop(node* stack) { int temp; node* toBePopped; if(stack->next!=NULL) temp = stack->next->data; toBePopped = stack->next; stack->next = stack->next->next; free(toBepopped); return temp; } else return 0; //error code, you can define according to the demand

Stack Implementation Return the top element in the stack int top(node* stack) { if(stack->next!=NULL) return stack->next->data; else return 0; } Determine if the stack is empty int is_empty(node *stack) return (stack->next==NULL);

If you are implementing a large project, usually we can separate the declaration and implementation to .h and .c files.

Stack Implementation #include <stdio.h> #include “stack.h” int main() { node* mystack = create_stack(); Push(1,mystack); Push(2,mystack); Push(3,mystack); while(!is_empty(mystack)) printf(“%d\n”,Pop(mystack)); } return 0;

Stack Implementation using Array Implement a stack using array typedef struct { int *data; //data is an array of integer int top; //position of top element int size; //maximum number of data in the stack } Stack;

Stack Implementation using Array createStack, makeEmpty //return 1 for success, 0 for fail int createStack(Stack* astack,int size) { astack->data = (int*)malloc(sizeof(int)*size); if(astack->data==NULL) //malloc failed return 0; astack->size = size; astack->top = -1; return 1; } void makeEmpty(Stack *astack)

Stack Implementation using Array isEmpty, isFull int isEmpty(Stack* astack) { if(astack->top<0) return 1; else return 0; } int isFull(Stack* astack) if(astack->top >= astack->size-1) //we put the 1st element at the 0th position

int top(Stack. astack) { if( int top(Stack* astack) { if(!isEmpty()) return astack->data[astack->top]; else return 0; //mean error code } int pop(Stack* astack) int adata = top(astack); astack->top--; return adata; return 0; //return 1 if we can successfully push //element, return 0 if we fail int push(Stack* astack, int adata) { if(!isFull()) astack->top++; astack->data[astack->top] = adata; return 1; } else return 0;

Queue ticket office of the Ocean park?

Queue Overview First In First Out (FIFO) Enqueue Dequeue

Queue Implementation A queue may be implemented using linked-list or array Implement a queue using array

Queue Implementation Implementing a queue using circular array typedef struct { int* data; //data is an array of int int head; //current head int tail; //current tail int num; //number of elements in queue int size; //size of queue } Queue;

Queue Implementation createQueue //return 1 for success, 0 for fail int createQueue(Queue* aqueue, int size) { aqueue->data = (int*)malloc(sizeof(int)*size); if(aqueue->data==NULL) return 0; aqueue->head=0; aqueue->tail=-1; aqueue->num=0; aqueue->size=size; return 1; }

Queue Implementation enqueue int enqueue(Queue *aqueue,int adata) { //return 1 is successfully enqueue, return 0 if the queue is full int enqueue(Queue *aqueue,int adata) { if(aqueue->num<aqueue->size) aqueue->tail = (aqueue->tail+1)%aqueue->size; //mod aqueue->data[queue->tail]=adata; aqueue->num++; return 1; } else return 0;

Queue Implementation dequeue int dequeue(Queue* aqueue) { //return the data if successfully dequeue, return 0 if fail int dequeue(Queue* aqueue) { if(aqueue->num>0) int adata = aqueue->data[aqueue->head]; aqueue->head = (aqueue->head+1)%aqueue->size; //mod aqueue->num--; return adata; } else return 0;

Queue Implementation isEmpty, isFull int isEmpty(Queue *aqueue) { return (aqueue->num==0); } int isFull(Queue *aqueue) return (aqueue->num==aqueue->size);

Queue Implementation front, makeEmpty int front(Queue* aqueue) { //see the front element, similar to dequeue but do not remove the data int front(Queue* aqueue) { return aqueue->data[aqueue->head]; } void makeEmpty(Queue* aqueue) aqueue -> head = 0; aqueue -> tail = -1; aqueue -> num = 0;