Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

 Проста реализация на опашка
Автор  gangs7a (29.02.2008 17:26) съобщение до автора
Погледнат  1027 пъти добави към любими
Оценка добави коментар
Гласове  1 изпрати на приятел
Коментари  (1) абонирай се за C-Cplusplus
     
gangs7a
     
 

Кодът представлява проста реализация на абстрактен тип опашка.
Класът включва следните методи:

- Push (добавя елемнт към опашката)
- Pop (взима елемент от опашката)
- Print (отпечатва елементите на опашката)
- WriteBinary (записва елементите на опашката в двоичен файл)
- ReadBinary (чете от двоичен файл)
- Count (преброява и връща като резултат броя на елементите в опашката)
- RemoveAll (премахва всички елементи на опашката)

CODE
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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/**
 *
 * Title: Queue.cpp
 * Coder: gangs7a
 * Date : 27.o2.2oo8 
 *
**/  

#include <iostream>
#include
<fstream>
using namespace std;

//Template Struct Element
template <class Type>
struct Element
{
   
Type Data;   //For Data
   
Element<Type> *Next;   //Pointer To Next Element
};

template <class Type>
class Queue
{
   
private:
       
Element<Type> *Top;   //Pointer To First Queue Element
       
   
public:
       
//Empty Constructor
       
Queue()
        {
           
Top = NULL;
       
}
       
       
//Destructor
        ~
Queue()
        {
           
RemoveAll();
       
}
       
       
//Add Element To Queue
       
void Push(Type pushData)
        {
           
if (!Top)
            {
               
Element<Type> *E = new Element<Type>;
               
E->Data = pushData;
               
E->Next = NULL;
               
Top = E;
               
return;
           
}
           
           
Element<Type> *Step = Top;
           
while(Step->Next) Step = Step->Next;
           
Element<Type> *E = new Element<Type>;
           
E->Data = pushData;
           
E->Next = NULL;
           
Step->Next = E;
       
}
       
       
//Get Element From Queue
       
void Pop(Type& popData)
        {
           
if (!Top)
            {
               
cout<<"Empty queue."<<endl;
               
return;
           
}
           
           
popData = Top->Data;
           
Element<Type> *Temp = Top;
           
Top = Top->Next;
           
delete Temp;
       
}
       
       
//Print Queue
       
void Print()
        {
           
if (!Top)
            {
               
cout<<"Empty queue."<<endl;
               
return;
           
}
           
           
Element<Type> *E = Top;
           
while(E)
            {
               
cout<<"("<<E->Data<<") ";
               
E = E->Next;
           
}
           
cout<<endl;
       
}
       
       
//Write Queue To Binary File
       
void WriteBinary(char *FileName)
        {
           
ofstream F;
           
F.open(FileName, ios::binary);
           
if (!F)
            {
               
cout<<"Error!"<<endl;
               
return;
           
}
           
           
Element<Type> *Step = Top;
           
while(Step)
            {
               
F.write((char*)&(Step->Data), sizeof(Type));
               
Step = Step->Next;
           
}
           
cout<<"Successfull."<<endl;
           
F.close();
       
}
       
       
//Read Queue From Binary File
       
void ReadBinary(char* FileName)
        {
           
ifstream F;
           
F.open(FileName, ios::binary);
           
if (!F)
            {
               
cout<<"Error!"<<endl;
               
return;
           
}
           
           
Type Step;
           
while(F.read((char*)&(Step), sizeof(Type))) cout<<"("<<Step<<") ";
           
cout<<endl;
       
}
       
       
//Count Queue Elements
       
int Count()
        {
           
int Counter = 0;
           
if (!Top) return Counter;
           
           
Element<Type> *Step = Top;
           
while(Step)
            {
               
Counter++;
               
Step = Step->Next;
           
}
           
return Counter;
       
}
       
       
//Remove All Queue Elements
       
void RemoveAll()
        {
           
while(Top)
            {
               
Element<Type> *Temp = Top;
               
Top = Top->Next;
               
delete Temp;
           
}
        }
}
;

int main()
{
   
//Create Queue
   
Queue<int> TestQueue;
   
//Push Elements To Queue
   
cout<<"Push elements:"<<endl;
   
cout<<"Push (3)"<<endl;
   
TestQueue.Push(3);
   
cout<<"Push (5)"<<endl;
   
TestQueue.Push(5);
   
cout<<"Push (7)"<<endl;
   
TestQueue.Push(7);
   
cout<<"Push (9)"<<endl;
   
TestQueue.Push(9);
   
//Print Queue
   
cout<<"\nPrint queue:"<<endl;
   
TestQueue.Print();
   
//Count QueueElements
   
cout<<"\nCount elements:"<<endl;
   
cout<<"["<<TestQueue.Count()<<"]"<<endl;
   
//Pop Elements From Queue
   
cout<<"\nPop elements:"<<endl;
   
int popOne;
   
TestQueue.Pop(popOne);
   
cout<<"Pop ("<<popOne<<")"<<endl;
   
int popTwo;
   
TestQueue.Pop(popTwo);
   
cout<<"Pop ("<<popTwo<<")"<<endl;
   
//Print Queue
   
cout<<"\nPrint queue:"<<endl;
   
TestQueue.Print();
   
//Write Queue To Binary File
   
cout<<"\nWrite to file:"<<endl;
   
TestQueue.WriteBinary("QueueLog.g");
   
//Read QueueFrom Binary File
   
cout<<"\nRead from file:"<<endl;
   
TestQueue.ReadBinary("QueueLog.g");
   
//End Program
   
system("PAUSE");
   
return EXIT_SUCCESS;
}
//EOF



Ключови думи: опашка Push Pop Print RemoveAll




 1 посетител чете този скрипт (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

Мисля че щеше да е по-лесно ако си беше дефинирал 2 указателя един за начало и един за край, но и така става     

  ikirachen на 09.04.2008 15:17

 

 
  • Интересно от Софтуер
 
  • Интересно от myLINKS
 
 
 
 



IT-PLACE.NET © 2004 - 2008