大一新生,编程题对我来说很有难度,没有思路解答,可以提供一点帮助吗,谢谢大家
(上一次的解答对我有非常大的帮助)
这是一链队列代码,初始化、进队、出队等功能都有了,输出队列所有数据元素的代码留给题主试着写写,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h>
#define MAXSIZE 1024
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int QElemType;
typedef struct QNode{
QElemType data;
struct QNode* next;
}QNode, * QueuePtr;
typedef struct
{
QueuePtr front;//队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
void InitQueue(LinkQueue& Q)//构造一个队列
{
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
if (!Q.front) exit(OVERFLOW);
Q.front->next = Q.rear->next = NULL;
return;
}
void EnQueue(LinkQueue& Q, QElemType e)// 进队函数
{
QNode* p;
p = (QueuePtr)malloc(sizeof(QNode));
if (!p) exit(OVERFLOW);
p->data = e;
p->next = NULL;
if (!Q.front->next)
Q.front->next = p;
else
Q.rear->next = p;
Q.rear = p;
return;
}
void DeQueue(LinkQueue& Q, QElemType &e)// 出队函数
{
if (!Q.front->next) {
e = -999;
return;
}
QueuePtr p = Q.front->next;
e = p->data;
Q.front->next = p->next;
free(p);
return;
}
void DestroyQueue(LinkQueue& Q)//销毁队列
{
while (Q.front)
{
Q.rear = Q.front->next;
free(Q.front);
Q.front = Q.rear;
}
return;
}
int main()
{
int e;
LinkQueue Q;
InitQueue(Q);
EnQueue(Q, 8);
EnQueue(Q, 10);
DeQueue(Q, e);
printf("%d\n", e);
DeQueue(Q, e);
printf("%d\n", e);
DeQueue(Q, e);
printf("%d\n", e);
DestroyQueue(Q);
return 0;
}