![Page 1: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/1.jpg)
C Structures• What is a structure?• A structure is a collection of related variables.• It may contain variables of many different data
types---in contrast to arrays.• Structure definition:
struct card {
char *face;
char *suit;
};
Structure tag Members
Structure type
![Page 2: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/2.jpg)
Basic Rules in Structures
• Members of the same structure must have unique names.
• But two different structures may contain members of the same name without conflict
• Each structure definition must end with a semicolon ( ; )
![Page 3: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/3.jpg)
Restrictions on the member type in a structure
• A member of a structure may not be:
• 1. a Function
• 2. a type of void
• 3. nest a structure of its own type
![Page 4: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/4.jpg)
Example
• struct employee {
• char firstName[ 20 ];
• char lastName[ 20 ];
• int age;
• char gender;
• double hourlySalary;
• };
• /*Notice the different types of the members*/
![Page 5: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/5.jpg)
Example 2: Self-referential structure • struct employee2 {• char firstName[ 20 ];• char lastName[ 20 ];• int age;• char gender;• double hourlyRate;• struct employee2 person; /* Error */• struct employee2 *ePtr; /*Allowed*/• }; • /* a structure cannot contain an instance of
itself (person)*/
![Page 6: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/6.jpg)
Initializing structures
• struct card a = { “Three”, “Hearts”};
• Will creates variable a to be of type struct card and initializes member face to “Three” and member suit to “Hearts”
• ** If there are few initializers in the list than members in structure, the remaining members are automatically initialized to 0.
![Page 7: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/7.jpg)
Accessing Members of Structures• The structure member operator and point
operator. They are often called :
• The dot (.)and arrow(->) operators
• Respectively.
• printf( “%s” , a.suit );
• printf( “%s”, aPtr->suit); /* this one =*/
• printf( “%s”, (*aPtr).suit);
• ( ) is needed here because of “.” has higher precedence than “*”.
![Page 8: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/8.jpg)
Example 3
• High-performance card shuffling and dealing simulation(Example name cards.c in Linux)
![Page 9: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/9.jpg)
In That Program• Function fillDeck initializes the Card
array in order with Ace through King of each suit.
• The Card array is passed to function shuffle• Function shuffle takes an array of 52 Card
structures as an argument.• The function loops through the 52 cards(0-
51). A number 0-51 is picked randomly.
•
![Page 10: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/10.jpg)
Structures vs. Class in C++
• In C++, a struct is the same as a class, except all its members are by default public.
![Page 11: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/11.jpg)
Union
• Similar to structure, union was introduced to save memory space.
• For those structure in which two or more fields can never be simultaneously active, we can use union to do the job.
• Another obvious advantage of union is that the members of the union do not have to have the same type.
![Page 12: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/12.jpg)
Example for union
• On the Linux subdirectory cs315 with name: union1.c and union1 for the .exe file.
• Both x and y share the same memory and they cannot be both active at the same time.
• ***Nowadays, union is no longer a very useful function in C because of the low price of memory system.
![Page 13: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/13.jpg)
• /* Fig. 10.5: fig10_05.c• An example of a union */• #include <stdio.h>
• union number { • int x;• double y;• };
• int main()• { • union number value;• • value.x = 100;• printf( "%s\n%s\n%s%d\n%s%f\n\n",• "Put a value in the integer member",• "and print both members.",• "int: ", value.x, • "double:\n", value.y );• • value.y = 100.0;• printf( "%s\n%s\n%s%d\n%s%f\n",• "Put a value in the floating member",• "and print both members.",• "int: ", value.x, • "double:\n", value.y );• return 0;• }
![Page 14: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/14.jpg)
typedef• typedef is a useful keyword
• 1. It is a mechanism for creating synonyms
• 2. Name for structure types are often use it to create a shorter type names.
• Example:
• typedef struct card Card;
• Here Card will replace struct card
![Page 15: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/15.jpg)
Another example for typedef
• The following program segment
• typedef struct {
• char *face;
• char *suit;
• } Card;
• will create the structure type Card without the need for a separate typedef statement
• typedef can make a program more portable.
![Page 16: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/16.jpg)
rand and srand
• rand is a function that generates pseudo-random numbers. It is so called pseudo is because the sequence repeats itself each time the program is executed.
•
• srand is the function that takes an unsigned integer argument and seeds function rand to produce a different sequence of random numbers for each execution of the program.
• The srand is called randomizing.
![Page 17: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/17.jpg)
Example• #include <stdio.h>
• #include <stdlib.h>
• int main ( )
• {
• int i;
• unsigned seed;
• printf( “Enter seed: “);
• scanf( “%u, &seed );
• for ( i = 1; i <= 10; i++ ) {
• printf( “%10d”, 1 + ( rand ( ) % 6 ) );
• if ( i% 5 == 0 )
• printf ( “\n” );
• }
• return 0;
• }
![Page 18: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/18.jpg)
Use computer clock to create random numbers
• srand ( time( NULL ) );
• will cause the computer to read its clock to obtain the value for the seed automatically.
• Here function time returns the current time of the day in seconds.
• Normally, function time provides a string representing the time of day. Null disable this capability for a specific call to time.
![Page 19: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/19.jpg)
The ? : Operator
• Format: TestExpr ? YesExpr : NoExpr
• If TestExpr is true, YesExpr is evaluated, otherwise, NoExpr is evaluated.
• Example: X = ( Y > Z ) ? Y : Z
![Page 20: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/20.jpg)
Data Structure and Dynamic Memory Allocation
• Linked list
• Stacks
• Queues
• Trees
• Dynamic Memory Allocation
• We mainly talk about the Dynamic Memory
• Allocation
![Page 21: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/21.jpg)
malloc and free & sizeof
• Purpose: Creating and maintaining dynamic data structure requires dynamic memory allocation---the ability for a program to obtain more memory space at execution time to hold new nodes, and to release space no longer needed.
• Function malloc normally used with sizeof operator.
![Page 22: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/22.jpg)
Example• newPtr = malloc( sizeof ( struct node ));
• Evaluates sizeof ( struct node ) to determine the size in bytes of a structure of type struct node, allocates a new area in memory of sizeof ( struct node ) bytes, and stores a pointer to the allocated memory in variable newPtr.
• If no memory is available, malloc returns a NULL pointer.
![Page 23: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/23.jpg)
free
• free ( newPtr );
• free will deallocates memory, i.e., to free the memory dynamically allocated by the preceding malloc call.
![Page 24: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/24.jpg)
Self-Referential Structure • Let look a structure example again
• struct node {
• int date;
• struct node *nextPtr;
• };
• structure type---struct node
• The second member of the structure is a pointer---nextPtr.
• We refer to the second member nextPtr as a link.
![Page 25: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/25.jpg)
Self-Referential Structure • nextPtr can be used to “tie” a structure of
type struct node to another structure of the same type.
• Self-Referential structure can be linked together to form useful data structures such as:
• 1. Lists• 2. Queues• 3. Stacks• 4. Trees
![Page 26: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/26.jpg)
Self-Referential Structures
• Lists
15 . 10
This back-slash represents NULL pointer.
struct A
struct B
It also indicates that the second struct doesn’t point to another structure.
![Page 27: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/27.jpg)
Dynamic Memory Allocation• 1. Function malloc and free and • operator sizeof• sizeof is a compile-time unary operator.• It returns an unsigned integer.• Example: sizeof (int) is used to determine an
integer is stored as 2 or 4 bytes on a particular computer.
• *** Using sizeof is not a function and it will not cause any execution-time overhead.
•
![Page 28: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/28.jpg)
Dynamic Memory Allocation• Function malloc takes an argument the
number of bytes to be allocated, and
• it will return a pointer of type void* to the allocated memory
• A viod* pointer can be assigned to any pointer type.
• Example:
• newPtr = malloc (sizeof ( struct node )) ;
• *** If no memory is available, malloc returns a NULL***
![Page 29: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/29.jpg)
Function free• Function free deallocates memory
• ---the memory is returned to the system.
• Example:
• To free the dynamic memory allocated by the preceding malloc call,
• free ( newPtr );
• ***Common misconception: Assuming the size of a structure is the sum of the sizes of its members.***
![Page 30: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/30.jpg)
“Memory Leak”• Not returning dynamically allocated
memory when it is no longer needed can cause the system run out of memory prematurely.
• Similarly, to free the memory that not allocated by malloc or refer to the memory that already been freed will cause program errors, too.
![Page 31: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/31.jpg)
Linked Lists• A linked list is a linear collection of self-
referential structures, called nodes.
. ..
Pointer to access the linked list
NULL
17 29 36 48
.StartPtr
***Linked list nodes are normally not stored contiguously.
Fat in hard drive file management is a good example.
![Page 32: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/32.jpg)
Linked Lists Vs Arrays • 1. Linked lists are dynamic, so the length of
a list can increase or decrease as necessary.
• The size of an array, however, cannot be altered once memory is allocated.
![Page 33: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/33.jpg)
Example --- List• This example shows how to use malloc,
free and sizeof operator in operating and maintaining a list.
• Pay attention to the dynamic memory allocations.
![Page 34: C Structures What is a structure? A structure is a collection of related variables. It may contain variables of many different data types---in contrast](https://reader035.vdocuments.us/reader035/viewer/2022062219/5519bee2550346047c8b45a0/html5/thumbnails/34.jpg)
*sptr previousPtr CurrentPtr. .
.
.
.
...
newPtr
A B
C
D E
NULL-----> .
Insertion of a node contain “c” to the ordered list