0% found this document useful (0 votes)
11 views14 pages

Understanding Data Structures in C

Lecture based on Structures in the C Programming Language

Uploaded by

vevigec281
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views14 pages

Understanding Data Structures in C

Lecture based on Structures in the C Programming Language

Uploaded by

vevigec281
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

03/24/2020

Structures

What is a Structure?

• It is a convenient tool for handling a group of


logically related data items.
– Examples:
• Student name, roll number, and marks.
• Real part and complex part of a complex number.

• This is our first look at a non-trivial data structure.


– Helps in organizing complex data in more meaningful way.
• The individual elements of a structure are called
members.

Programming and Data Structure 2

1
03/24/2020

Defining a Structure

• A structure may be defined as:

struct tag {
member 1;
member 2;
:
member m;
};

– struct is the required keyword.


– tag is the name of the structure.
– member 1, member 2, … are individual member declarations.

Programming and Data Structure 3

Contd.

• The individual members can be ordinary variables,


pointers, arrays, or other structures.
– The member names within a particular structure must
be distinct from one another.
– A member name can be the same as the name of a
variable defined outside of the structure.
• Once a structure has been defined, the individual
structure-type variables can be declared as:
struct tag var_1, var_2, …, var_n;

Programming and Data Structure 4

2
03/24/2020

Example

• A structure definition:
struct student {
char name[30];
int roll_number;
int total_marks;
char dob[10];
};

• Defining structure variables:


struct student a1, a2, a3;

A new data-type
Programming and Data Structure 5

A Compact Form

• It is possible to combine the declaration of the structure


with that of the structure variables:

struct tag {
member 1;
member 2;
:
member m;
} var_1, var_2,…, var_n;

• In this form, tag is optional.

Programming and Data Structure 6

3
03/24/2020

Equivalent Declarations
struct student {
char name[30];
int roll_number;
int total_marks;
char dob[10];
} a1, a2, a3;

struct {
char name[30];
int roll_number;
int total_marks;
char dob[10];
} a1, a2, a3;

Programming and Data Structure 7

Processing a Structure

• The members of a structure are processed individually,


as separate entities.
• A structure member can be accessed as:
[Link]
where variable refers to the name of a structure-type
variable, and member refers to the name of a member
within the structure.
• Examples:
[Link], [Link], a1.roll_number,
[Link]

Programming and Data Structure 8

4
03/24/2020

Example: Complex number addition

#include <stdio.h>
main()
{
struct complex
{
float real;
float cmplex;
} a, b, c;

scanf ("%f %f", &[Link], &[Link]);


scanf ("%f %f", &[Link], &[Link]);

[Link] = [Link] + [Link];


[Link] = [Link] + [Link];
printf ("\n %f + %f j", [Link], [Link]);
}

Programming and Data Structure 9

Comparison of Structure Variables

• Unlike arrays, group operations can be performed


with structure variables.
– A structure variable can be directly assigned to another
structure variable of the same type.
a1 = a2;
• All the individual members get assigned.
– Two structure variables can be compared for equality or
inequality.
if (a1 == a2)……
• Compare all members and return 1 if they are equal; 0
otherwise.

Programming and Data Structure 10

5
03/24/2020

Arrays of Structures

• Once a structure has been defined, we can


declare an array of structures.
struct student class[50];

– The individual members can be accessed as:


class[i].name
class[5].roll_number

Programming and Data Structure 11

Arrays within Structures

• A structure member can be an array:


struct student
{
char name[30];
int roll_number;
int marks[5];
char dob[10];
} a1, a2, a3;

• The array element within the structure can be


accessed as:
[Link][2]

Programming and Data Structure 12

6
03/24/2020

Defining data type: using typedef

• One may define a structure data-type with a single name.

• General syntax:
typedef struct {
member-variable1;
member-variable2;
.
member-variableN;
} tag;

• tag is the name of the new data-type.

Programming and Data Structure 13

typedef : An example

typedef struct {
float real;
float imag;
} _COMPLEX;

_COMPLEX a, b, c;
_COMPLEX complexarray[100];

A new data type

Programming and Data Structure 14

7
03/24/2020

Structure Initialization

• Structure variables may be initialized following similar


rules of an array. The values are provided within the
second braces separated by commas.
• An example:
_COMPLEX a={1.0,2.0}, b={-3.0,4.0};

[Link]=1.0; [Link]=2.0;
[Link]=-3.0; [Link]=4.0;

Programming and Data Structure 15

Parameter Passing in a Function

• Structure variables can be passed as parameters like any


other variables. Only the values will be copied during
function invocation.

void swap (_COMPLEX a, _COMPLEX b)


{
_COMPLEX tmp;

tmp = a;
a = b;
b = tmp;
}

Programming and Data Structure 16

8
03/24/2020

An Example
#include <stdio.h>

typedef struct {
float real;
float imag;
} _COMPLEX;

void swap (_COMPLEX a, _COMPLEX b)


{
_COMPLEX tmp;

tmp = a;
a = b;
b = tmp;
}

Programming and Data Structure 17

Example:: contd.
void print (_COMPLEX a)
{
printf("(%f, %f) \n“, [Link], [Link]);
}

main()
{
_COMPLEX x = {4.0,5.0}, y = {10.0,15.0};

print(x); print(y);
swap(x,y);
print(x); print(y);
}

Programming and Data Structure 18

9
03/24/2020

• Output:
(4.000000, 5.000000)
(10.000000, 15.000000)
(4.000000, 5.000000)
(10.000000, 15.000000)

– No swapping takes place, since only values are passed


to the function. The original variables in the calling
function remains unchanged.

Programming and Data Structure 19

Returning structures

• It is also possible to return structure values from a function.


The return data type of the function should be same as the
data type of the structure itself.
_COMPLEX add (_COMPLEX a, _COMPLEX b)
{
_COMPLEX tmp;

[Link] = [Link] + [Link];


[Link] = [Link] + [Link];

return(tmp);
}

Direct arithmetic operations are not possible with structure variables.

Programming and Data Structure 20

10
03/24/2020

Example: Addition of two complex numbers


#include <stdio.h>
int main()
typedef struct { {
float real; _COMPLEX num1, num2, sum;
float imag; scanf ("%f %f", &[Link],
} _COMPLEX; &[Link]);
scanf ("%f %f", [Link],
&[Link]);
_COMPLEX add (_COMPLEX a, _COMPLEX b)
{
sum = add (num1, num2);
_COMPLEX tmp;
printf ("\nSum is: %f + j %f",
[Link], [Link]);
[Link] = [Link] + [Link];
[Link] = [Link] + [Link];
}
return(tmp);
}

Programming and Data Structure 21

Example: Compute perimeter of polygon


#include <stdio.h>
int main()
typedef struct { {
int sides; POLYGON shape;
float length[10]; int k;
} POLYGON; float peri;

scanf (”%d”, &[Link]);


float perimeter (POLYGON p)
for (k=0; k<[Link]; k++)
{
scanf (”%f", &[Link][k];
float peri = 0.0;
int i;
peri = perimeter (shape);
printf ("\nPerimeter is: %f",
for (i=0; i<[Link]; i++)
peri);
peri += [Link][i];
}
return(peri);
}

Programming and Data Structure 22

11
03/24/2020

Estimating the Size of a Structure

• The “sizeof” for a struct variable is not always


equal to the sum of the “sizeof” of each individual
member.
– Padding is added by the compiler to avoid alignment
issues.
– Padding is only added when a structure member is
followed by a member with a larger size or at the end
of the structure.
• Exact convention may vary from one compiler to
another.
Programming and Data Structure 23

(a) Example 1
#include <stdio.h>
int main()
{
struct A { Here, x (int) is followed by z
// sizeof(int) = 4 (double), which is larger in size
int x; than x. Hence padding is required
// Padding of 4 bytes after x. Also, padding is required
// sizeof(double) = 8
at the end for data alignment.
double z;
// sizeof(short int) = 2
short int y;
// Padding of 6 bytes
};
printf("Size of struct: %ld", sizeof(struct A));
return 0;
}
Size of struct: 24

Programming and Data Structure 24

12
03/24/2020

(b) Example 2
#include <stdio.h>
int main()
{
struct B { The members of the structure are
// sizeof(double) = 8 sorted in decreasing order of their
double z; sizes. Hence padding is required
// sizeof(int) = 4 only at the end.
int x;
// sizeof(short int) = 2
short int y;
// Padding of 2 bytes
};
printf("Size of struct: %ld", sizeof(struct B));
return 0;
}

Size of struct: 16

Programming and Data Structure 25

(c) Example 3
#include <stdio.h>
int main()
{
struct C { Here, y (short int) is followed by x
// sizeof(double) = 8 (int) and hence padding is
double z; required after y. No padding is
// sizeof(short int) = 2 required at the end.
short int y;
// Padding of 2 bytes
// sizeof(int) = 4
int x;
};
printf("Size of struct: %ld", sizeof(struct B));
return 0;
}

Size of struct: 16

Programming and Data Structure 26

13
03/24/2020

Exercise Problems
1. Extend the complex number program to include functions for addition,
subtraction, multiplication, and division.
2. Define a structure for representing a point in two-dimensional Cartesian co-
ordinate system.
• Write a function to compute the distance between two given points.
• Write a function to compute the middle point of the line segment
joining two given points.
• Write a function to compute the area of a triangle, given the co-
ordinates of its three vertices.
3. Define a structure to represent students’ information (name, roll number,
cgpa). Read the data corresponding to N students in a structure array, and
find out the students with the highest and lowest cgpa values.

Programming and Data Structure 27

14

You might also like