看看思想,,,代码都是调试通过的。
#ifndef _TWO_QUEUE_H_
#define _TWO_QUEUE_H_
typedef int ElemType;
typedef struct _two_queue
{
ElemType a;
struct _two_queue *prev;
struct _two_queue *next;
}tq;
typedef struct _node
{
tq *first_head;
tq *first_tail;
tq *last_head;
tq *last_tail;
}pnode;
typedef enum _status
{
first,last
}status;
//初始化空队列:
void init_queue(pnode *p);
//销毁队列:
void destroy_queue(pnode *p);
//判断是否为空队列:
bool is_empty(pnode *p);
//获得队头元素:
void get_head(pnode *p,ElemType *e,status sign);
//入队:
void push_queue(pnode *p,ElemType e,status sign);
//出队:
void pop_queue(pnode *p,ElemType *e,status sign);
#endif
/*双端队列函数基本操作实现如下*/
#include"two_queue.h"
#include<stdio.h>
#include<stdlib.h>
//初始化空队列:
void init_queue(pnode *p)
{
if(p == NULL)
{
printf("error\n");
exit(1);
}
else
{
p->first_head = NULL;
p->first_tail = NULL;
p->last_head = NULL;
p->last_tail = NULL;
}
}
//判断是否为空队列:
bool is_empty(pnode *p)
{
return p->first_head == NULL;
}
//入队:
void push_queue(pnode *p,ElemType e,status sign)
{
tq *tmp = (tq *)malloc(sizeof(tq)*1);
tmp->a = e;
tmp->next = NULL;
if(is_empty(p))
{
p->first_head = tmp;
p->first_tail = tmp;
p->last_head = tmp;
p->last_tail = tmp;
}
else
{
if(sign == first)
{
tmp->next = p->first_head;
p->first_head ->prev = tmp;
p->first_tail = tmp;
p->first_head = tmp;
}
else
{
tmp->prev = p->last_head;
p->last_head->next = tmp;
p->last_tail = tmp;
p->last_head = tmp;
}
}
}
//出队:
void pop_queue(pnode *p,ElemType *e,status sign)
{
if(is_empty(p))
{
printf("error\n");
exit(1);
}
else
{
if(sign == first)
{
*e = p->first_head->a;
p->first_head = p->first_head->next;
}
else
{
*e = p->last_head ->a;
p->last_head = p->last_head->prev;
}
}
}
//销毁队列:
void destroy_queue(pnode *p)
{
tq *s = p->first_head;
if(is_empty(p))
{
printf("error\n");
exit(1);
}
else
{
while(s)
{
p->first_head = p->first_head->next;
free(s);
s = p->first_head;
}
p->first_head = NULL;
p->first_tail = NULL;
p->last_head = NULL;
p->last_tail = NULL;
printf("the queue is destroyed successfully\n ");
}
}
//获得队头元素:
void get_head(pnode *p,ElemType *e,status sign)
{
if(is_empty(p))
{
printf("the queue is NULL,no top number\n");
exit(1);
}
else
{
if(sign == first)
{
*e = p->first_head->a;
}
else
{
*e = p->last_head->a;
}
}
}
//主函数
#include<stdio.h>
#include"two_queue.h"
int main()
{
int n = 10;
int x = -99;
int k = 100;
int y;
int t;
pnode m;
init_queue(&m);
push_queue(&m,n,first);
push_queue(&m,k,last);
push_queue(&m,x,first);
//get_head(&m,&t,first);
//printf("%d\n",t);
//get_head(&m,&y,last);
//printf("%d\n",y);
pop_queue(&m,&y,first);
//pop_queue(&m,&t,first);
printf("%d\n",y);
//printf("%d\n",t);
destroy_queue(&m);
get_head(&m,&t,first);
printf("%d\n",t);
return 0;
}