7
C 3: . 1. 1. 2. 2. 1. 2. C: 3. C: 4. C: ! " # 5. C: $ %# 6. C: %# 7. C: &! 3. " 1. 2. C: 3. C: 4. C: ! " 5. C: ! # 6. C: $ %# 7. C: %# 8. C: &! . A. 1. 1. «» !: ! (enqueue) , " ! (dequeue) , enqueue(2) 2 : !"# !$! % &: ’ !# ! ! !# ! (First In – First Out: FIFO) enqueue(4) 2 4 4 dequeue( ) enqueue(5) 4 enqueue(3) 4 5 5 3 A. 1. 2. ( : (init) $ (enqueue) ! (dequeue) ! (empty) ! (full) )! "!: ! ( ) *!" ( !) +" !" " (! )

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3 (ΕΚΤΥΠΩΣΗ)

Embed Size (px)

Citation preview

Page 1: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3 (ΕΚΤΥΠΩΣΗ)

����� �������� � C

�� ��� 3:

����

�������� ������

����������� �� �������. ������

1. ��

1. ���� �� ���

2. ������� ������

2. ���� �� � ������

1. �����

2. ��������� �� C: ��������

3. ��������� �� C: ������������

4. ��������� �� C: ��!��� – "���

�� ��� �� #� ��

5. ��������� �� C: ����$���

%#������

6. ��������� �� C: ��� �����

%#������

7. ��������� �� C: ���&��! �

����������� �������������� � ����������������

3. "����� ��

1. �����

2. ��������� �� C: ��������

3. ��������� �� C: ������������

4. ��������� �� C: ��!��� – "���

��

5. ��������� �� C: ��!��� – �� #�

��

6. ��������� �� C: ����$���

%#������

7. ��������� �� C: ��� �����

%#������

8. ��������� �� C: ���&��! �

�. ��������

A. �����1. ����1. ������ �����

����������� �������������� � ����������������

� «��» ����� ��� ���� �������� �� �������� ����� � ��� �!���:

• � !�� ��� (enqueue) ���� ��������, ������� �� ��"�� ��� �����

• � �!�������� (dequeue) ���� ��������, ������� ��� ���� ��� �����

enqueue(2)

2

����������:

• � ���� �� !�"��#� �� ������ ���� ���!�$��!

%�������� &�������:

• '� !�#�� ������� !�� !���� ��� ��� ���� ����� �� !�#�� !�� � � �� �� (First In – First

Out: FIFO)

enqueue(4)

2 4

4

dequeue( )enqueue(5)

4

enqueue(3)

4 5

5

3

A. �����1. ����2. (����� ��� ���

����������� �������������� � ����������������

�� '������ ������ � ��� ���� �����:

• ������������ ��� ����� (init)

• ����$��� ���� �������� ��� ���� (enqueue)

• ��� ����� ���� �������� �!� �� ���� (dequeue)

• ��!��� �� � ���� ����� ���� (empty)

• ��!��� �� � ���� ����� ������ (full)

)!������ ����� �"�!������:

• �� ������ !����� (������� �� ���)

• *!"� ���� (�� !�����)

• +��"��� ����

• �� �!"� ���������� "��� (�!����� �� ���)

Page 2: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3 (ΕΚΤΥΠΩΣΗ)

A. �����2. *!"� ���� �� ������1. ,�����

����������� �������������� � ����������������

%��� !�#�� �"�!���� (���� ��) � ������!�������:

• -��� ������ !����� N ��� ��� �� �!� �������� �� ������� ��� �����

• ��� ������� ����."��� (finish) !�� � ������� �� ��"�� ��� �����

• (,�������� ��� � ���� ��� ����� � ����� �� 0)

/"#� C

a[0]

a[1] a[2] a[2] a[N-1]

finish=2

4 5 34 5 3

����

A. �����2. *!"� ���� �� ������2. )"�!���� � C: ��"#���

����������� �������������� � ����������������

�� &������� � C ����� �� ���"�� ��:

• � ���� ����� ��� ���� (struct) �� �� � �� �������:

• -��� ������� �� QUEUE_SIZE �������

• ��� ������� ����."��� (finish) !�� ������� �� ��"�� ��� ����� �� ����:

• *!� 0…QUEUE_SIZE-1 �� � ���� ���� ���"������ ��� �������

• -1 �� � ���� ����� �����.

#define QUEUE_SIZE 10 /* Megethos pinaka ouras */

typedef int elem; /* typos dedomenwn ouras */

struct queue{

elem array[QUEUE_SIZE]; /* pinakas stoixeiwn */

int finish; /* telos tis ouras */

};

typedef struct queue QUEUE; /* Sinwnimo tis ouras */

finish=2

2 6 4

*��!������:0 1 2 3 QUEUE_SIZE-1

array

A. �����2. *!"� ���� �� ������3. )"�!���� � C: *�����!���� �����

���������� �������������� � ����������������

� ������!���� ������� ������� �� ��"�� ��� ����� �� �� -1

/* QU_init(): arxikopoiei tin oura */

void QU_init(QUEUE *q)

{

q->finish=-1;

}

finish=??

�0&1:

0 1 2 3 QUEUE_SIZE-1

array

finish=-1

0 1 2 3 QUEUE_SIZE-1

array

�,'*:

������:

• ����� !����� ������� ��� ���� ��� ����� � !��!�� �� ��"���� ��� 2��� ����� ��

�������!

A. �����2. *!"� ���� �� ������4. )"�!���� � C: -"����� – +��� ���� ��� /����� ����

!���������� �������������� � ����������������

� ���!��� �� � ���� ����� ���� (��������� !� #�), ������� ."�!����� �� � ����."��� finish����� �� �� -1 (��������� N-1)

/* QU_empty(): epistrefei TRUE/FALSE

* analoga me to an i oura einai adeia */

int QU_empty(QUEUE q)

{

return q.finish==-1;

}

/* QU_full(): epistrefei TRUE/FALSE

* analoga me to an i oura einai gemati */

int QU_full(QUEUE q)

{

return q.finish==QUEUE_SIZE-1;

}

Page 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3 (ΕΚΤΥΠΩΣΗ)

5

A. �����2. *!"� ���� �� ������5. )"�!���� � C: ��� ��� %��������

"���������� �������������� � ����������������

� ����$��� ��� ���� ������� !�� #���� �� ������� �� �� finish+1 (�2��� ����� ���

����)

/* QU_enqueue(): Eisagei to x stin oura q

* epistrefei TRUE: se periptwsi epitixias

* FALSE: se periptwsi apotixias */

int QU_enqueue(QUEUE *q,elem x)

{

if (QU_full(*q))

return FALSE;

else

{

q->finish++;

q->array[q->finish]=x;

return TRUE;

}

}

finish=2

2 6 4

0 1 2 3 QUEUE_SIZE-1

array

�0&1: �,'* (!.�. !�� ��� ��� «5»):

finish=3

2 6 4

0 1 2 3 QEUEUE_SIZE-1

array

A. �����2. *!"� ���� �� ������6. )"�!���� � C: *!�������� %��������

#$���������� �������������� � ����������������

� ��� ����� (��� !�#���) �������� ��� ����� ������� � � ��:

1. *!� �������� �� ������� !�� ����� ��� ���� ��� ����� (��� �� �!����2��)

2. ������������� �� �!�"��!� ������� ���� ��� �� �������

3. ���� #����� �� finish (���#����� ���� 1)

finish=2

2 6 4

0 1 2 3 QUEUE_SIZE-1

array

�0&1:

�,'*:

…6 4

0 1 2 3 QUEUE_SIZE-1

array

finish=1

*x=2

A. �����2. *!"� ���� �� ������6. )"�!���� � C: *!�������� %��������

##���������� �������������� � ����������������

/* QU_dequeue(): Kanei apomakrinsi tou prwtou stoixeiou tis ouras

* epistrefei TRUE: se periptwsi epitixias

* FALSE: se periptwsi apotixias */

int QU_dequeue(QUEUE *q,elem *x)

{

int i;

if (QU_empty(*q))

return FALSE;

else

{

/* 1. Apothikeysi tou stoixeiou pou eksagetai*/

*x=q->array[0];

/* 2. Aristeri metakinisi twn stoixeiwn kata mia thesi */

for (i=0; i<q->finish; i++)

q->array[i]=q->array[i+1];

/* 3. To finish meiwnetai kata 1 */

q->finish--;

return TRUE;

}

}

A. �����2. *!"� ���� �� ������7. )"�!���� � C: ����������

#����������� �������������� � ����������������

� �����"����� ��� ����"��� �� project queue.dev �� �!���:

� '� queue.h ���� �� !�����!� �� �������� ��� ��� ��"� ��� �����

� '� queue.c ���� �� #���� �� ��������

� '� main.c ���� ��� !�������� !�� �!��������� ��� ���� ���� ����� �������.

� «��� ��» �� �� !�������� #�� �� ����� !"��� ��������� � "��������� ��� �����.

)!�� ����:

• '� !���� ���� !����������� � �!������� ������ ��"��� ��� �� «/"#� C – �� ��� 14:

,�.�"��� ����."��#�»

Page 4: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3 (ΕΚΤΥΠΩΣΗ)

A. �����3. +��"��� ����1. � ������ ��� ��� +��"��� ����

#����������� �������������� � ����������������

� � !�� � ��� �!��������� �!����� ��� ��������� �� ������� ��� ����� ���� ��� ��

�������, �� �!��� �������� �� �!�������.

� �!������ �� �!�������� .�"��� �� ����� �� .�"���� �""� ��� ����."��� !�� �� �������

��� ���� ��� ����� ��� �� ������ � ���� ��� ����� ����� ��� ��� ����."���� (���� ��

������� ��������� �� ������� ��� �����). /�� !���������:

enqueue(2)

2

enqueue(4)

2 4

4

dequeue( )

enqueue(5)

4

enqueue(3)

4 5

5

3

start=0finish=0

start=0 finish=1

start=1finish=1

start=1 finish=2

start=1 finish=3

start=-1finish=-1

A. �����3. +��"��� ����1. � ������ ��� ��� +��"��� ����

#����������� �������������� � ����������������

� /�� �� �!������ �� (���) !��."���, ��� ��!��� ����� � 2������ �� ��"�� ��� !�����

(�!��� ��� ��� � �!������ �� �������� ��� ��� ������� ��� !�����)

� ,������� � ������ ��� ���"���� �����!

� 3!�� !"��� ���� 2������ �� ��"�� ��� !����� �� ���� ������� � �������� ���

���� ��� !�����

� ��"��� ."�!���� ��� !����� � ���"� (�!�� � �!����� �� ��� 1-1 ����� � 0)

4 5 3start=1 finish=3

0 1 2 3

array

4 5 6 7

0

array

1

2

345

67 start=1

finish=3

2 61start=6finish=0

0 1 2 3

array

4 5 6 7

0

array

1

2

345

67start=6

finish=1

4

5

3

26 1

A. �����3. +��"��� ����2. )"�!���� � C: ��"#���

#����������� �������������� � ����������������

�� &������� � C ����� �� ���"�� ��:

• � ���� ����� ��� ���� (struct) �� �� � �� �������:

• -��� ������� �� QUEUE_SIZE �������

• ��� �������� ����."���� (start ��� finish) !�� �������� ��������� ��� ���� ��� �� ��"�� ��� ����� ��

����� (�� start=finish=-1 �� � ���� ����� �����).

#define QUEUE_SIZE 10 /* Megethos pinaka ouras */

typedef int elem; /* typos dedomenwn ouras */

struct queue{

elem array[QUEUE_SIZE]; /* pinakas stoixeiwn */

int start; /* arxi tis ouras */

int finish; /* telos tis ouras */

};

typedef struct queue QUEUE; /* Sinwnimo tis ouras */

*��!������: 0

array1

2

345

67 start=1

finish=3

4

5

3

A. �����3. +��"��� ����3. )"�!���� � C: *�����!���� �����

#����������� �������������� � ����������������

� ������!���� ������� ������� ��� ���� ��� �� ��"�� ��� ����� �� �� -1

/* QU_init(): arxikopoiei tin oura */

void QU_init(QUEUE *q)

{

q->start =-1;

q->finish=-1;

}

�0&1: �,'*:

0

array

1

2

345

67

QUEUE_SIZE=8

start=??

finish=??

0

array

1

2

345

67

QUEUE_SIZE=8

start=-1

finish=-1

Page 5: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3 (ΕΚΤΥΠΩΣΗ)

A. �����3. +��"��� ����4. )"�!���� � C: -"����� – +��� ����

# ���������� �������������� � ����������������

� ���!��� �� � ���� ����� ���� ������� ."�!����� �� � ����."��� start (��� � ����."���

finish) ����� �� �� -1

• *���� �� �"�� ���� �� ��� �!� ��� ��� (�2�� ��������� ��� � �"�!���� �� .���#� !�� ��

����� �� � ��� ����� !�� ������!���� ��� ���� ��� ���� !��.�� ��� �"�!����)

/* QU_empty(): epistrefei TRUE/FALSE

* analoga me to an i oura einai adeia */

int QU_empty(QUEUE q)

{

return q.finish==-1;

}

A. �����3. +��"��� ����5. )"�!���� � C: -"����� – /����� ����

#!���������� �������������� � ����������������

� ���!��� �� � ���� ����� !� #� ������� ."�!����� �� � ����."��� finish ���� ���� 1 "��������!� �� ����."��� start (��"��� start==finish+1)

• ���� ��� !���!�� !�� finish=QUEUE_SIZE-1 ���� !��!�� �� �"�� ���� �� start==0

*��� �!���� �� ����� �� ��� !������ ���4� �#����:

/* QU_full(): epistrefei TRUE/FALSE

* analoga me to an i oura einai gemati */

int QU_full(QUEUE q)

{

return q.start==(q.finish+1)%QUEUE_SIZE;

}

)!�� ����:

• � ��"���� % �!����2�� �� �!�"��!� ��� �������� ��� ��� �#� (/"#� C – �� ��� 4).

• ,�# ��� ������!������ #�� �� ��� ����"� �� !����!��� �� start ���� �� �� ��� �!�����

��, ���� �� �� 0.

A. �����3. +��"��� ����6. )"�!���� � C: ��� ��� %��������

#"���������� �������������� � ����������������

� ����$��� ���� �������� ��� ���� ������� (�2��� ���� ��� ����� ������) � � ��:

• '� finish !������ ���� ��� �!����� �� ��� !�����:

• '�� ���� finish+1 (�� �� finish < QUEUE_SIZE-1)

• '�� ���� 0 (�� �� finish = QUEUE_SIZE-1)

• '� ������� �!� �������� ��� �� finish.

�0&1:

0

array

1

2

345

67 start=1

finish=3

4

5

3

0

array

1

2

345

67 start=1

4

5

35

finish=4QUEUE_SIZE=8

QUEUE_SIZE=8

5

�,'* (!.�. !�� ��� ��� «5»):

A. �����3. +��"��� ����6. )"�!���� � C: ��� ��� %��������

�$���������� �������������� � ����������������

/* QU_enqueue(): Eisagei to x stin oura q

* epistrefei TRUE: se periptwsi epitixias

* FALSE: se periptwsi apotixias */

int QU_enqueue(QUEUE *q,elem x)

{

if (QU_full(*q))

return FALSE;

else

{

if (QU_empty(*q))

{

q->start=0;

q->finish=0;

}

else

{

q->finish=(q->finish+1)%QUEUE_SIZE;

}

q->array[q->finish]=x;

return TRUE;

}

}

Page 6: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3 (ΕΚΤΥΠΩΣΗ)

start=1

A. �����3. +��"��� ����6. )"�!���� � C: *!�������� %��������

�#���������� �������������� � ����������������

� ��� ����� (��� !�#���) �������� �!� ��� ���� ������� (�2��� ���� ��� ����� �����):

• *!� ��������� �� ������� ��� ��� start (#�� �� �!����2��)

���:

• *� �� start ����� < �!� QUEUE_SIZE-1, ���� ������ start=start+1

• *� �� start ����� = �� QUEUE_SIZE-1 ���� ������ start=0

�0&1:

0

array

1

2

345

67 start=1

finish=3

4

5

3

0

array

1

2

345

67

5

3

QUEUE_SIZE=8

QUEUE_SIZE=8

5

�,'* *x=4

finish=3

A. �����3. +��"��� ����6. )"�!���� � C: *!�������� %��������

������������ �������������� � ����������������

/* QU_dequeue(): Kanei apomakrinsi tou prwtou stoixeiou tis ouras

* epistrefei TRUE: se periptwsi epitixias

* FALSE: se periptwsi apotixias */

int QU_dequeue(QUEUE *q,elem *x)

{

if (QU_empty(*q))

return FALSE;

else

{

*x=q->array[q->start];

if (q->start == q->finish) /* H oura adeiase */

{

q->start=-1;

q->finish=-1;

}

else

{

q->start=(q->start+1)%QUEUE_SIZE;

}

return TRUE;

}

}

A. �����3. +��"��� ����7. )"�!���� � C: ����������

������������ �������������� � ����������������

� �����"����� ��� ����"��� �� project circular_queue.dev �� �!���:

� '� queue.h ���� �� !�����!� �� �������� ��� ��� ��"� ��� �����

� '� queue.c ���� �� #���� �� ��������

� '� main.c ���� ��� !�������� !�� �!��������� ��� ���� ���� ����� �������.

� «��� ��» �� �� !�������� #�� �� ����� !"��� ��������� � "��������� ��� �����.

(. *�����,2������ 1: '����� '��!�$��

���������� �������������� � ���������������� ��

� +��������� ��� !�������� �� �!��� � !������#��� �� "��������� ���� ���!�$�� �� ���

������

� +� � ������ (�!� �� ���) � ����� ��� ���� ��.�"����#� 80 ���������. +� � ���� �

����� �� !�"� 5 !�"����. %��� ��.�"����� � �!� �������� �� �!#���� ��� !�"���.

� '� ����� !�������� � �"�!���� ��� � �� ��������� (��� �!� ��� ����� �!�"��#�):

� 52� � ��"���. �� ���.�$���� �!� ��� ����� �� �!#���� ��� !�"��� ��� �!����: *�

«�����» ��� !�#�� ����, ���� � ��!� ������� � �����, �""�#� � ��!� ������� ���

������� ����. *� ��� ����� � ����� ����, ���� � !�"���� ��� � ������� ������.

� *���#��� ��"���. �� �!�"������ ������ ��� ������ !�� ���� !�"��� ��� �

�!����������� � 1�� !�"���� ��� �������. %��� � ��� � ��!#����� �� �!#���� ��� ���

�� ������ �!� �� �!��� � �!����� ���.

� '�"�� ������������. �� ������� �2����, ���� �� ��� �� ��� ������ ����� �����. %� ���� ���

!���!�� � .��$�� ������ ��� �� !��� ������ ����� ����� !�"���.

)!���� �:

• ��������� ��� � ���"��� ���� ����� «!�� �������» �������� ������!������ ����, ���� ���

��� �!"� ����.

Page 7: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3 (ΕΚΤΥΠΩΣΗ)

(. *�����,2������ 2: ���� ��������������

���������� �������������� � ���������������� ��

� � ���� !������������� ����� ��� ���� ��������, �!�� �� � ������� !�� !�������� ��

���� �� ��� ���� ���� ��� ���� !�� ��� ������� ��� �� !�� �� ���$�� ��� !������������

��� (�� ����"����� � ���� ��� ��� ���, ��� ����"����� ��� � !������������).

� -��� ���!�� ��� �� �"�!������� ��� ���� �������� «���� ��������������» �����:

� 1� ��!� ������� ���� ����� ������� ��� �� �� ������� ��� ����� !�� �� ���$�� ���

!������������.

� � ������ ��� �������� �� ������� ��� �� �� ��� ����� (�� .�� ���

!������������)

� +��������� ��� !�������� �!���� �� ��� "���������� ��� ����� !�������������,

���!�!��#���� ����""�"� �� project !�� ����������� ��� ��� ���"��� ����.

)!���� �:

• ��������� ��� � ���"��� ���� ����� «!�� �������» �������� ������!������ ����, ���� ���

��� �!"� ����.

(. *�����,2������ 3: ,���!� %������� �����

���������� �������������� � ���������������� ��

� ������� ��� ���"��� ���� ������� !�� ����������� �� �� ���.

� ��"���� �� ������������ ��� ����������� !�� �

� H �!��� � ��!#��� �� ������� ��� �����.

� ,!��������� �� project !�� ����������� ��� ��� ���"��� ���� #�� �� �����#��� ���

����� �� �������.

� � ������� ���� !��!�� �� ��" �� ��� main, �� #� ������� ����������� !�� �.

� ������ ���! � ������� ���� ������� ����������� �!��� �,1 !��!�� �� ����

!��.�� �� ��"� ��� �����.

� )!���� �: �!������ ��� �� ������ .�� ������ ����� (�!� !.�. ��� !������ ����)

� %�� ����� !�������� ��� �����������, ��� �!�"��� ��� ��� ����!� ��� �����, ��

��"����� ���� � �������.

void QU_print(QUEUE *q)

(. *�����,2������ 4: *������2� �����

���������� �������������� � ���������������� �

� ,!��������� �� project ��� �2������� 3, ��� #�� �� ���$���� ��� � � �� ����������� !�� �

��� ��"#��� ��� �����:

� � ������� ���� � �������2�� �� ������� ��� ����� (�� !�#�� ������� �� �������

��"������, �� ������� !����"������, �.��.)

� %�������� �� ������!������ ��� ���.�!

void QU_reverse(QUEUE *q)