十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
#include stdlib.h // malloc, free
10年积累的网站制作、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有镇宁免费网站建设让你可以放心的选择与我们合作。
#include "queue.h"
struct queue * queue_create(void)
{
struct queue *q = (struct queue *)malloc(sizeof(struct queue));
if (q == NULL) { // malloc failed
return NULL;
}
q-head = dnode_create();
q-tail = dnode_create();
q-head-next = q-tail;
q-tail-prev = q-head;
q-size = 0;
return q;
}
void queue_destroy(struct queue *q)
{
if (q != NULL) {
while (!queue_isempty(q)) {
queue_dequeue(q);
}
dnode_destroy(q-head);
dnode_destroy(q-tail);
free(q);
q = NULL;
}
}
int queue_front(const struct queue * const q)
{
return q-tail-prev-data;
}
void queue_enqueue(struct queue * const q, const int e)
{
struct dnode *dn = dnode_create();
dn-data = e;
struct dnode *tmp = q-head-next;
q-head-next = dn;
dn-prev = q-head;
dn-next = tmp;
tmp-prev = dn;
q-size += 1;
}
int queue_dequeue(struct queue * const q)
{
struct dnode *dn = q-tail-prev;
struct dnode *tmp = dn-prev;
tmp-next = q-tail;
q-tail-prev = tmp;
int ret = dn-data;
dnode_destroy(dn);
q-size -= 1;
return ret;
}
int queue_size(const struct queue * const q)
{
return q-size;
}
int queue_isempty(const struct queue * const q)
{
return q-size 0 ? 0 : 1;
}
//////////////////////
static void bubble_sort(int * const a, const int n)
{
int swapped = 1;
while (swapped) {
swapped = 0;
for (int i = 1; i n; i++) {
if (a[i] a[i - 1]) {
int tmp = a[i];
a[i] = a[i - 1];
a[i - 1] = tmp;
swapped = 1;
}
}
}
}
这样的话应该符合你的要求:
#includestdio.h
void add(int queue[],int x);
int Top(int queue[]);
void del(int queue[]);
int end=0;
int main()
{
int n;
scanf("%d",n);//将要入队列n个元素
int queue[1000];
for(int i=1;i=n;i++)//输入n个元素
{
add(queue,i);//将i加入队列
}
//验证加入队列的元素,将队列中的元素按照输入的顺序输出:
for( i=1;i=n;i++)
{
printf("%d ",Top(queue));//Top函数返回队头元素
del(queue);//删除队头元素
}
//验证输出已经出队列后的队列(数组)元素:
printf("\n");
for(i=1;i=n;i++)
printf("%d ",queue[i]);
printf("\n");
return 0;
}
void add(int queue[],int x)
{
queue[++end]=x;
}
int Top(int queue[])
{
return queue[1];//注意,这里的函数始终return queue[1];这里是和将普通数组中的元素输出最大的不同之处。!!!!!!
}
void del(int queue[])
{
for(int i=2;i=end;i++)
{
queue[i-1]=queue[i];
}
queue=0;//将删除后的地方置0
end--;
}
有两种办法:
重载一个queue模板,把锁封装到重载的函数里
每次使用queue的函数的时候加锁,使用完毕后,解锁