运行环境Visual studio 2017
运行平台Windows 7
list.h
#pragma once
typedef int Elemtype;
typedef enum{OK=1,ERROR=0}Status;
typedef struct coord {
int x;/*abscissa(横坐标)*/
int y;/*ordinate(纵坐标)*/
}Coord;
enum Direction{up = 1,down ,left ,right };
typedef struct elements {
Coord coord;/*坐标*/
enum Direction direction;/*下一步的方向*/
};
typedef struct list
{
Elemtype data;
struct list* prev;
struct list* next;
}List, *Ptrlist;
typedef struct queue
{
Ptrlist front;
Ptrlist tail;
int cursize;
}Queue;
Status Initqueue(Queue &Lq);
Status Clear(Queue &Lq);
Status Destroy(Queue &Lq);
bool Queueempty(Queue &Lq);
int Queuelength(Queue &Lq);
Status Getfront(Queue &Lq,Elemtype &x);
Status Gettail(Queue &Lq,Elemtype &x);
Status push_front(Queue &Lq, Elemtype x);
Status push_tail(Queue &Lq, Elemtype x);
void Showqueue(Queue &Lq);
list.cpp
#include "list.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
void Freenode(Ptrlist p)
{
free(p);
p = NULL;
}
Ptrlist Buynode()
{
Ptrlist s = (Ptrlist)malloc(sizeof(List));
if (s == NULL) exit(0);
memset(s, 0, sizeof(List));
return s;
}
Status Initqueue(Queue &Lq)
{
Lq.cursize = 0;
Lq.tail = NULL;
Lq.front = Lq.tail;
return OK;
}
Status Clear(Queue &Lq)
{
while (Lq.front->next != Lq.front->prev)
{
Ptrlist p = Lq.front;
Freenode(p);
Lq.front = Lq.front->next;
}
Ptrlist q = Lq.front;
Freenode(q);
Lq.front = Lq.tail = NULL;
Lq.cursize = 0;
return OK;
}
Status Destroy(Queue &Lq)
{
Clear(Lq);
Freenode(Lq.front);
Freenode(Lq.tail);
return OK;
}
bool Queueempty(Queue &Lq)
{
return (Lq.cursize == 0);
}
int Queuelength(Queue &Lq)
{
return Lq.cursize;
}
Status Getfront(Queue &Lq,Elemtype &x)
{
if (Queueempty(Lq))
{
return ERROR;
}
else
{
x = Lq.front->data;
return OK;
}
}
Status Gettail(Queue &Lq,Elemtype &x)
{
if (Queueempty(Lq))
{
return ERROR;
}
else
{
x = Lq.tail->data;
return OK;
}
}
Status push_front(Queue &Lq, Elemtype x)
{
Ptrlist s = Buynode();
if (Lq.front == NULL)
{
Lq.front = s;
Lq.tail = Lq.front;
Lq.tail->next = Lq.front;
Lq.tail->prev = Lq.front;
Lq.front->next = Lq.tail;
Lq.front->prev = Lq.tail;
s->data = x;
Lq.cursize++;
return OK;
}
s->prev = Lq.front->prev;
Lq.front->prev->next = s;
Lq.front->prev = s;
s->next = Lq.front;
s->data = x;
Lq.cursize++;
Lq.front = s;
return OK;
}
Status push_tail(Queue &Lq, Elemtype x)
{
Ptrlist s = Buynode();
if (Lq.tail == NULL)
{
Lq.tail = s;
Lq.front = Lq.tail;
Lq.tail->next = Lq.front;
Lq.tail->prev = Lq.front;
Lq.front->next = Lq.tail;
Lq.front->prev = Lq.tail;
s->data = x;
Lq.cursize++;
return OK;
}
s->prev = Lq.front->prev;
Lq.front->prev->next = s;
Lq.front->prev = s;
s->next = Lq.front;
s->data = x;
Lq.cursize++;
Lq.tail = s;
return OK;
}
Status Pop_front(Queue &Lq)
{
if (Queueempty(Lq))
{
return ERROR;
}
Ptrlist p = Lq.front;
Lq.front->next->prev = Lq.front->prev;
Lq.front->prev->next = Lq.front->next;
Lq.front = Lq.front->next;
Freenode(p);
Lq.cursize--;
return OK;
}
Status Pop_tail(Queue &Lq)
{
if (Queueempty(Lq))
{
return ERROR;
}
Ptrlist p = Lq.tail;
Lq.tail->prev->next = Lq.tail->next;
Lq.tail->next->prev = Lq.tail->prev;
Lq.tail = Lq.tail->prev;
Freenode(p);
Lq.cursize--;
return OK;
}
void Showqueue(Queue &Lq)
{
Ptrlist p = Lq.front;
while (p->next != Lq.tail)
{
printf("%d,", p->data);
}
printf("\n");
}
主函数(对于函数模块可以自己添加进去进行测试)
main.c
#include "list.h"
#include
#include
#include
int main()
{
Queue myq;
Initqueue(myq);
Elemtype data[3] = { 11,22,33 };
Elemtype out[3] ;
push_front(myq, data[0]);
push_tail(myq, data[1]);
push_front(myq, data[2]);
Status Getfront(myq,out[0]);
Status Gettail(myq,out[1]);
Status Getfront(myq,out[2]);
return 0;
}