-
Notifications
You must be signed in to change notification settings - Fork 0
/
LPWordADT.c
172 lines (157 loc) · 5.42 KB
/
LPWordADT.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
// LPWordADT.c
/* ΥΛΟΠΟΙΗΣΗ ΣΥΝΔΕΔΕΜΕΝΗΣ ΛΙΣΤΑΣ ΔΥΝΑΜΙΚΑ - ΜΕ ΔΕΙΚΤΕΣ
ΤΑ ΣΤΟΙΧΕΙΑ ΤΩΝ ΚΟΜΒΩΝ ΕΙΝΑΙ ΤΥΠΟΥ string */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "LPWordADT.h"
void CreateList(ListPointer *List)
/* Λειτουργία: Δημιουργεί μια κενή συνδεδεμένη λίστα.
Επιστρέφει: Τον μηδενικό δείκτη List
*/
{
*List = NULL;
}
boolean EmptyList(ListPointer List)
/* Δέχεται: Μια συνδεδεμένη λίστα με τον List να δείχνει στον πρώτο κόμβο.
Λειτουργία: Ελέγχει αν η συνδεδεμένη λίστα είναι κενή.
Επιστρέφει: True αν η λίστα είναι κενή και false διαφορετικά
*/
{
return (List==NULL);
}
void LinkedInsert(ListPointer *List, ListElementType Item, ListPointer PredPtr)
/* Δέχεται: Μια συνδεδεμένη λίστα με τον List να δείχνει στον πρώτο κόμβο,
ένα στοιχείο δεδομένων Item και έναν δείκτη PredPtr.
Λειτουργία: Εισάγει έναν κόμβο, που περιέχει το Item, στην συνδεδεμένη λίστα
μετά από τον κόμβο που δεικτοδοτείται από τον PredPtr
ή στην αρχή της συνδεδεμένης λίστας,
αν ο PredPtr είναι μηδενικός(NULL).
Επιστρέφει: Την τροποποιημένη συνδεδεμένη λίστα με τον πρώτο κόμβο της
να δεικτοδοτείται από τον List.
*/
{
ListPointer TempPtr;
TempPtr= (ListPointer)malloc(sizeof(struct ListNode));
//TempPtr->Data = Item;
strcpy(TempPtr->Data,Item);
if (PredPtr==NULL) {
TempPtr->Next = *List;
*List = TempPtr;
}
else {
TempPtr->Next = PredPtr->Next;
PredPtr->Next = TempPtr;
}
}
void LinkedDelete(ListPointer *List, ListPointer PredPtr)
/* Δέχεται: Μια συνδεδεμένη λίστα με τον List να δείχνει στον πρώτο κόμβο της
και έναν δείκτη PredPtr.
Λειτουργία: Διαγράφει από τη συνδεδεμένη λίστα τον κόμβο που έχει
για προηγούμενό του αυτόν στον οποίο δείχνει ο PredPtr
ή διαγράφει τον πρώτο κόμβο, αν ο PredPtr είναι μηδενικός,
εκτός και αν η λίστα είναι κενή.
Επιστρέφει: Την τροποποιημένη συνδεδεμένη λίστα με τον πρώτο κόμβο
να δεικτοδοτείται από τον List.
Έξοδος: Ένα μήνυμα κενής λίστας αν η συνδεδεμένη λίστα ήταν κενή .
*/
{
ListPointer TempPtr;
if (EmptyList(*List))
printf("EMPTY LIST\n");
else
{
if (PredPtr==NULL)
{
TempPtr = *List;
*List = TempPtr->Next;
}
else
{
TempPtr = PredPtr->Next;
PredPtr->Next = TempPtr->Next;
}
free(TempPtr);
}
}
void LinkedTraverse(ListPointer List)
/* Δέχεται: Μια συνδεδεμένη λίστα με τον List να δείχνει στον πρώτο κόμβο.
Λειτουργία: Διασχίζει τη συνδεδεμένη λίστα και
επεξεργάζεται κάθε δεδομένο ακριβώς μια φορά.
Επιστρέφει: Εξαρτάται από το είδος της επεξεργασίας.
*/
{
ListPointer CurrPtr;
if (EmptyList(List))
printf("EMPTY LIST\n");
else
{
CurrPtr = List;
while ( CurrPtr!=NULL )
{
printf("%s ", CurrPtr->Data);
CurrPtr = CurrPtr->Next;
}
printf("\n");
}
}
void LinearSearch(ListPointer List, ListElementType Item, ListPointer *PredPtr, boolean *Found)
/* Δέχεται: Μια συνδεδεμένη λίστα με τον List να δείχνει στον πρώτο κόμβο.
Λειτουργία: Εκτελεί μια γραμμική αναζήτηση στην μη ταξινομημένη συνδεδεμένη
λίστα για έναν κόμβο που να περιέχει το στοιχείο Item.
Επιστρέφει: Αν η αναζήτηση είναι επιτυχής η Found είναι true, ο CurrPtr δείχνει
στον κόμβο που περιέχει το Item και ο PredPtr στον προηγούμενό του
ή είναι nil αν δεν υπάρχει προηγούμενος.
Αν η αναζήτηση δεν είναι επιτυχής η Found είναι false.
*/
{
ListPointer CurrPtr;
boolean stop;
CurrPtr = List;
*PredPtr = NULL;
stop= FALSE;
while (!stop && CurrPtr!=NULL )
{
if (CurrPtr->Data==Item )
stop = TRUE;
else
{
*PredPtr = CurrPtr;
CurrPtr = CurrPtr->Next;
}
}
*Found=stop;
}
void OrderedLimearSearch(ListPointer List, ListElementType Item, ListPointer *PredPtr, boolean *Found)
/* Δέχεται: Ένα στοιχείο Item και μια ταξινομημένη συνδεδεμένη λίστα,
που περιέχει στοιχεία δεδομένων σε αύξουσα διάταξη και στην οποία
ο δείκτης List δείχνει στον πρώτο κόμβο.
Λειτουργία: Εκτελεί γραμμική αναζήτηση της συνδεδεμένης ταξινομημένης λίστας
για τον πρώτο κόμβο που περιέχει το στοιχείο Item ή για μια θέση
για να εισάγει ένα νέο κόμβο που να περιέχει το στοιχείο Item.
Επιστρέφει: Αν η αναζήτηση είναι επιτυχής η Found είναι true,
ο CurrPtr δείχνει στον κόμβο που περιέχει το Item και
ο PredPtr στον προηγούμενό του ή είναι nil αν δεν υπάρχει προηγούμενος.
Αν η αναζήτηση δεν είναι επιτυχής η Found είναι false.
*/
{
ListPointer CurrPtr;
boolean DoneSearching;
CurrPtr = List;
*PredPtr = NULL;
DoneSearching = FALSE;
*Found = FALSE;
while (!DoneSearching && CurrPtr!=NULL )
{
if (strcmp(CurrPtr->Data,Item)>=0 )
{
DoneSearching = TRUE;
*Found = (CurrPtr->Data==Item);
}
else
{
*PredPtr = CurrPtr;
CurrPtr = CurrPtr->Next;
}
}
}