-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patha10f4.c
More file actions
151 lines (124 loc) · 3.56 KB
/
a10f4.c
File metadata and controls
151 lines (124 loc) · 3.56 KB
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
#include <stdio.h>
#include <stdlib.h>
typedef int StackElementType; /*ď ôýđďň ôůí óôďé÷ĺßůí ôçň óôďßâáň
ĺíäĺéęôéęÜ ôýđďő int */
typedef struct StackNode *StackPointer;
typedef struct StackNode
{
StackElementType Data;
StackPointer Next;
} StackNode;
typedef enum {
FALSE, TRUE
} boolean;
void CreateStack(StackPointer *Stack);
boolean EmptyStack(StackPointer Stack);
void Push(StackPointer *Stack, StackElementType Item);
void Pop(StackPointer *Stack, StackElementType *Item);
void TransferStack(StackPointer Stack1,StackPointer *Stack2);
void TraverseStack(StackPointer Stack);
main(){
StackPointer AStack, BStack;
StackElementType AItem;
int i, numbOfNodes;
CreateStack(&AStack);
CreateStack(&BStack);
printf("Plithos komvwn: ");
scanf("%d", &numbOfNodes);
for(i=0; i<numbOfNodes; i++){
printf("Eisagete to %do stoixeio: ",i+1);
scanf("%d", &AItem);
Push(&AStack, AItem);
}
//TraverseStack(AStack);
printf("\n*** 1h Lista ***\n");
TraverseStack(AStack);
TransferStack(AStack,&BStack);
printf("\n\n*** 2h Lista ***\n");
TraverseStack(BStack);
printf("\n\n");
system("pause");
}
void TransferStack(StackPointer Stack1,StackPointer *Stack2)
{
StackPointer CurrPtr;
StackElementType Item;
if (EmptyStack(Stack1))
{
printf("EMPTY Stack\n");
}
else
{
CurrPtr = Stack1;
while ( CurrPtr!=NULL )
{
Pop(&CurrPtr,&Item);
Push(&(*Stack2),Item);
}
}
}
void CreateStack(StackPointer *Stack)
/* Ëĺéôďőńăßá: Äçěéďőńăĺß ěéá ęĺíŢ óőíäĺäĺěÝíç óôďßâá.
ĹđéóôńÝöĺé: Ěéá ęĺíŢ óőíäĺäĺěÝíç óôďßâá, Stack
*/
{
*Stack = NULL;
}
boolean EmptyStack(StackPointer Stack)
/* ÄÝ÷ĺôáé: Ěéá óőíäĺäĺěÝíç óôďßâá, Stack.
Ëĺéôďőńăßá: ĹëÝă÷ĺé áí ç Stack ĺßíáé ęĺíŢ.
ĹđéóôńÝöĺé: TRUE áí ç óôďßâá ĺßíáé ęĺíŢ, FALSE äéáöďńĺôéęÜ
*/
{
return (Stack==NULL);
}
void Push(StackPointer *Stack, StackElementType Item)
/* ÄÝ÷ĺôáé: Ěéá óőíäĺäĺěÝíç óôďßâá đďő ç ęďńőöŢ ôçň äĺéęôďäďôĺßôáé áđü ôďí
äĺßęôç Stack ęáé Ýíá óôďé÷ĺßď Item.
Ëĺéôďőńăßá: ĹéóÜăĺé óôçí ęďńőöŢ ôçň óőíäĺäĺěÝíçň óôďßâáň, ôď óôďé÷ĺßď Item.
ĹđéóôńÝöĺé: Ôçí ôńďđďđďéçěÝíç óőíäĺäĺěÝíç óôďßâá
*/
{
StackPointer TempPtr;
TempPtr= (StackPointer)malloc(sizeof(struct StackNode));
TempPtr->Data = Item;
TempPtr->Next = *Stack;
*Stack = TempPtr;
}
void Pop(StackPointer *Stack, StackElementType *Item)
/* ÄÝ÷ĺôáé: Ěéá óőíäĺäĺěÝíç óôďßâá đďő ç ęďńőöŢ ôçň äĺéęôďäďôĺßôáé áđü ôďí äĺßęôç Stack.
Ëĺéôďőńăßá: Áöáéńĺß áđü ôçí ęďńőöŢ ôçň óőíäĺäĺěÝíçň óôďßâáň,
áí ç óôďßâá äĺí ĺßíáé ęĺíŢ, ôď óôďé÷ĺßď Item.
ĹđéóôńÝöĺé: Ôçí ôńďđďđďéçěÝíç óőíäĺäĺěÝíç óôďßâá ęáé ôď óôďé÷ĺßď Item.
¸îďäďň: ĚŢíőěá ęĺíŢň óôďßâáň, áí ç óőíäĺäĺěÝíç óôďßâá ĺßíáé ęĺíŢ
*/
{
StackPointer TempPtr;
if (EmptyStack(*Stack)) {
printf("EMPTY Stack\n");
}
else
{
TempPtr = *Stack;
*Item=TempPtr->Data;
*Stack = TempPtr->Next;
free(TempPtr);
}
}
void TraverseStack(StackPointer Stack)
{
StackPointer CurrPtr;
if (EmptyStack(Stack))
{
printf("EMPTY Stack\n");
}
else
{
CurrPtr = Stack;
while ( CurrPtr!=NULL )
{
printf(" %d", CurrPtr->Data);
CurrPtr = CurrPtr->Next;
}
}
}