队列的顺序存储

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值