队列基本操作
队列是先进先出的数据结构,出队的一端叫队首,入队的一端叫队尾,就像是日常生活中排队买火车票一样,下面是队列的基本操作
创建史带头节点的链表
[cpp] #include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR -1
#define OVERFLOW 0
typedef int elemtype;
typedef int status;
typedef struct QNode
{
elemtype data;
struct QNode *next;
}QNode,*queuePtr; //定义链表节点中数据
typedef struct
{
queuePtr front; //指向链表的头
queuePtr rear; //指向链表的尾 指向不是没有分配单元的节点
}LinkQueue;
//对队列进行初始化
status initQueue(LinkQueue &q)
{
q.front=q.rear=(queuePtr)malloc(sizeof(QNode)); //创建头节点 头指针指向头节点
if(!q.front) //创建失败
{
exit(OVERFLOW);
}
q.front->next=NULL;
return OK;
}
//销毁队列
status destoryQueue(LinkQueue &q)
{
while(q.front)
{
q.rear=q.front->next; //将头节点的next赋给尾指针
free(q.front); //删除头节点
q.front=q.rear; //重新生成为节点
}
printf("队列销毁成功!\n");
q.front=NULL;
return OK; //删除完成返回OK
}
//进行元素插入
status enQueue(LinkQueue &q,elemtype e)
{
queuePtr p=(queuePtr)malloc(sizeof(QNode)); //为新元素分配空间
if(!p) exit(OVERFLOW);
p->data=e;
p->next=NULL;
q.rear->next=p; //为尾指针的next重新赋值 将元素插入表尾
q.rear=p; //重新定位尾指针
return OK;
}
//删除元素
status deQueue(LinkQueue &q)
{
if(q.front==q.rear) return ERROR; //此时队列为空
queuePtr p=q.front->next;
// e=p->data; //删除是dui首
q.front->next=p->next;
if(q.rear==p)
q.rear=q.front;
free(p);
printf("元素删除成功!\n");
return OK;
}
//获得队首元素
status getHead(LinkQueue &q)
{
queuePtr p=q.front->next;
printf("%d\n",p->data);
return OK;
}
//输出队列
status printQueue(LinkQueue q)
{
queuePtr p;
p=q.front->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
return OK;
}
int main()
{
LinkQueue q;
int i,j,k,m;
initQueue(q);//进行队列的初始化:
printf("插入几个数据:\n");
scanf("%d",&i);
for(j=0;j<i;j++)
{ printf("请输入第%d个整数",j+1);
scanf("%d",&k);
enQueue(q,k);
}
do
{
printf("请根据提示进行相应操作:\n");
printf("删除元素选择输入1:\n");
printf("清空队列选择输入2:\n");
printf("输出队列选择输入3:\n");
printf("退出输入4:\n");
scanf("%d",&m);
switch(m)
{
case 1: deQueue(q); break;
case 2: destoryQueue(q); break;
case 3: printQueue(q);break;
default: printf("请重新输入:\n");break;
}
}while(m!=4);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR -1
#define OVERFLOW 0
typedef int elemtype;
typedef int status;
typedef struct QNode
{
elemtype data;
struct QNode *next;
}QNode,*queuePtr; //定义链表节点中数据
typedef struct
{
queuePtr front; //指向链表的头
queuePtr rear; //指向链表的尾 指向不是没有分配单元的节点
}LinkQueue;
//对队列进行初始化
status initQueue(LinkQueue &q)
{
q.front=q.rear=(queuePtr)malloc(sizeof(QNode)); //创建头节点 头指针指向头节点
if(!q.front) //创建失败
{
exit(OVERFLOW);
}
q.front->next=NULL;
return OK;
}
//销毁队列
status destoryQueue(LinkQueue &q)
{
while(q.front)
{
q.rear=q.front->next; //将头节点的next赋给尾指针
free(q.front); //删除头节点
q.front=q.rear; //重新生成为节点
}
printf("队列销毁成功!\n");
q.front=NULL;
return OK; //删除完成返回OK
}
//进行元素插入
status enQueue(LinkQueue &q,elemtype e)
{
queuePtr p=(queuePtr)malloc(sizeof(QNode)); //为新元素分配空间
if(!p) exit(OVERFLOW);
p->data=e;
p->next=NULL;
q.rear->next=p; //为尾指针的next重新赋值 将元素插入
补充:软件开发 , C++ ,