数据结构与算法---列队(单链表实现)
一、理论知识
待续
二、代码实现
1.节点结构体、栈顶、尾指针结构体定义
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node* pNext;
}node,*pNode;
typedef struct Queue//保存栈的头。尾指针
{
pNode front;
pNode rear;
}Queue,*pQueue;
2.初始化栈
void initQueue(pQueue qu)
{
qu->front = NULL;
qu->rear = NULL;
}
3.判断栈是否为空
bool isEmpty(pQueue qu)
{
return (!qu->front) && (!qu->rear);
}
4.得到栈顶元素
ElemType getFrontData(pQueue qu)
{
if (!isEmpty(qu))
{
return qu->front->data;
}
return -1;
}
5.压栈
void pushQueue(pQueue qu,ElemType data)
{
pNode newNode = new node;
newNode->data = data;
newNode->pNext = NULL;
if (!qu->front)
{
qu->front = newNode;
qu->rear = newNode;
}
else
{
qu->rear->pNext = newNode;
qu->rear = newNode;
}
}
6.出栈
void popQueue(pQueue qu)
{
if (isEmpty(qu))
return;
pNode tempNode = qu->front->pNext;
pNode delNode = qu->front;
if (!tempNode)
{
qu->front = qu->rear = tempNode;
delete delNode;
delNode = NULL;
}
else
{
qu->front = tempNode;
delete delNode;
delNode = NULL;
}
}
7.销毁栈
void destoryQueue(pQueue qu)
{
if (!isEmpty(qu))
{
pNode tempNode;
while (qu->front)
{
tempNode = qu->front;
qu->front = tempNode->pNext;
delete tempNode;
}
}
}
8.打印栈内元素
void showQueue(pQueue qu)
{
if (isEmpty(qu))
printf("栈为空,无法打印!\n");
pNode tempNode = qu->front;
while (tempNode)
{
printf("%d->", tempNode->data);
tempNode = tempNode->pNext;
}
}