typedef void SeqQueue;
using namespace std;
struct SeqQueueT {
int length;
int capacity;
unsigned int* node;
};
SeqQueue* createQueue(int capacity) {
SeqQueueT *seqT = new SeqQueueT;
seqT->length = 0;
seqT->capacity = capacity;
seqT->node = new unsigned int[capacity];
return seqT;
}
void destoryQueue(SeqQueue* queue) {
if (queue == NULL) {
return;
}
SeqQueueT* seqT = (SeqQueueT*)queue;
if (seqT->node != NULL) {
//cout << "before list addr: " << list << " seqlist addr: " << seqlist << endl;
delete seqT->node;
seqT->node = NULL;
seqT->capacity = 0;
seqT->length = 0;
delete queue;
//delete seqlist;
queue = NULL;
seqT = NULL;
//cout << "after list addr: " << list << " seqlist addr: " << seqlist << endl;
}
}
void clearQueue(SeqQueue* queue) {
if (queue == NULL) {
return;
}
SeqQueueT* seqT = (SeqQueueT*)queue;
if (seqT != NULL) {
seqT->length = 0;
}
}
void appendData(SeqQueue* queue, void* item) {
if (queue == NULL || item == NULL) {
return;
}
SeqQueueT* seqT = (SeqQueueT*)queue;
if (seqT->length >= seqT->capacity) {
return;
}
seqT->node[seqT->length] = *(int*)item;
seqT->length++;
}
void* retrieveQueue(SeqQueue* queue) {
if (queue == NULL) {
return NULL;
}
SeqQueueT* seqT = (SeqQueueT*)queue;
if (seqT->length == 0) {
return NULL;
}
int data = seqT->node[0];
for (int i = 1; i < seqT->length; i++) {
seqT->node[i - 1] = seqT->node[i];
}
seqT->length--;
return &data;
}
void* getHealderData(SeqQueue* queue) {
if (queue == NULL) {
return NULL;
}
SeqQueueT* seqT = (SeqQueueT*)queue;
if (seqT->length == 0) {
return NULL;
}
int data = seqT->node[0];
return &data;
}
int getQueueLength(SeqQueue* queue) {
if (queue == NULL) {
return NULL;
}
SeqQueueT* seqT = (SeqQueueT*)queue;
return seqT->length;
}
int getQueueCapacity(SeqQueue* queue) {
if (queue == NULL) {
return NULL;
}
SeqQueueT* seqT = (SeqQueueT*)queue;
return seqT->capacity;
}
int main() {
SeqQueue* queue = createQueue(10);
int a1 = 1, a2 = 2, a3 = 3, a4 = 4, a5 = 5;
appendData(queue, (int*)&a1);
appendData(queue, (int*)&a2);
appendData(queue, (int*)&a3);
appendData(queue, (int*)&a4);
appendData(queue, (int*)&a5);
while (getQueueLength(queue) > 0) {
int data = *(int*)retrieveQueue(queue);
cout << "data: " << data << endl;
}
appendData(queue, (int*)&a1);
appendData(queue, (int*)&a2);
cout << "lenth: " << getQueueLength(queue) << " capacity: " << getQueueCapacity(queue) << endl;
destoryQueue(queue);
system("pause");
return 0;
}
队列的顺序存储
最新推荐文章于 2024-06-13 23:07:13 发布