您的位置:首页 > 编程语言 > C语言/C++

C语言之队列学习笔记

2017-06-04 13:32 197 查看
#include<stdio.h>
#include<stdlib.h>

#define N 100
#define datatype char

struct queue
{
datatype data
;
int front;
int rear;
};
typedef struct queue Q;

void init(Q * myqueue);
int isempty(Q * myqueue);

void enQueue(Q * myqueue, datatype num);
datatype deQueue(Q * myqueue);
void printfQ(Q * myqueue);
datatype gethead(Q * myqueue);


#include"队列.h"

void init(Q * myqueue)
{
myqueue->front = myqueue->rear = 0;
}

int isempty(Q * myqueue)
{
if (myqueue->front == myqueue->rear)
return 1;
return 0;
}

void enQueue(Q * myqueue, datatype num)
{
if (myqueue->rear == N)
{
printf("入队列失败");
return;
}
else
{
myqueue->data[myqueue->rear] = num;
myqueue->rear += 1;
}
}

datatype deQueue(Q * myqueue)
{
if (isempty(myqueue))
{
printf("出队列失败");
return -1;
}
else
{
myqueue->front += 1;
myqueue->data[myqueue->front-1];
}
}

void printfQ(Q * myqueue)
{
printf("\n");
if (isempty(myqueue))
{
printf("队列为空");
}
else
{
for (int i = myqueue->front; i < myqueue->rear; i++)
{
printf("%c  ", myqueue->data[i]);
}
}
}

datatype gethead(Q * myqueue)
{
if (isempty(myqueue))
{
printf("队列为空");
return -1;
}
else
{
return myqueue->data[myqueue->front];
}
}


链表队列以及优先队列

struct queue
{
int num;
int high;
struct queue *pNext;
};
typedef struct queue Queue;

Queue * init(Queue *queueA);	//初始化
Queue *	EnQueue(Queue *queueA, int num, int high);	//入队
Queue *	DeQueue(Queue *queueA, Queue *pout);	//出队
Queue *	freeall(Queue *queueA);	//清空
void insertEnQueue(Queue *queueA, int num, int high);
void sort(Queue *queueA);
void printall(Queue *queueA);	//打印

#include"Queue.h"
#include<stdio.h>
#include<stdlib.h>

Queue * init(Queue *queueA)	//初始化
{
return NULL;
}

Queue *	EnQueue(Queue *queueA, int num, int high)	//入队
{
Queue *pnewnode = (Queue *)malloc(sizeof(Queue));	//分配内存
pnewnode->num = num;
pnewnode->high = high;
pnewnode->pNext = NULL;
if (queueA == NULL)
{
queueA = pnewnode;
return queueA;
}
else
{
Queue *p = queueA;
while (p->pNext != NULL)
{
p = p->pNext;
}
p->pNext = pnewnode;
return queueA;
}
}

Queue *	DeQueue(Queue *queueA, Queue *pout)	//出队
{
if (queueA == NULL)
{
return NULL;
}
else
{
pout->num = queueA->num;
pout->high = queueA->high;
Queue *ptemp = queueA;
queueA = queueA->pNext;
free(ptemp);

return queueA;
}
}

Queue *	freeall(Queue *queueA)	//清空
{

}

void insertEnQueue(Queue *queueA, int num, int high)
{
Queue *pnewnode = (Queue *)malloc(sizeof(Queue));
pnewnode->num = num;
pnewnode->high = high;
if (queueA == NULL)
{
pnewnode->pNext = NULL;
queueA = pnewnode;
return queueA;
}
else
{
if (pnewnode->high > queueA->high)
{
pnewnode->pNext = queueA;
queueA = pnewnode;
return queueA;
}
else
{
Queue *p = queueA;
while (p->pNext != NULL)
{
p = p->pNext;
}
if (pnewnode->high <= p->high)
{
p->pNext = pnewnode;
pnewnode->pNext = NULL;
return queueA;
}
else
{
Queue *p1, *p2;
p1 = p2 = NULL;
p1 = queueA;
while (p1->pNext != NULL)
{
p2 = p1->pNext;
if (p1->high >= pnewnode->high && p2->high < pnewnode->high)
{
pnewnode->pNext = p2;
p1->pNext = pnewnode;
break;
}
p1 = p1->pNext;
}
return queueA;
}
}
}
}

void sort(Queue *queueA)	//优先级排队
{
if (queueA == NULL || queueA->pNext == NULL)
{
return;
}
/*for (Queue * p1 = queueA; p1 != NULL; p1=p1->pNext)
{
for (Queue *p2 = p1->pNext; p2 != NULL; p2 = p2->pNext)
{
if (p1->high < p2->high)
{
Queue temp;
temp.num = p1->num;
p1->num = p2->num;
p2->num = temp.num;

temp.high = p1->high;
p1->high = p2->high;
p2->high = temp.high;
}
}
}*/
}

void printall(Queue *queueA)	//打印
{
if (queueA == NULL)
{
return;
}
else
{
printf("%d,%d,%p,%p\n",queueA->num,queueA->high,queueA,queueA->pNext);
printall(queueA->pNext);
}
}

#include<stdio.h>
#include<stdlib.h>
#include"Queue.h"

void main()
{
Queue *phead = NULL;	//创建头结点
phead = init(phead);
phead = insertEnQueue(phead, 1, 1);
//sort(phead);
printall(phead);
printf("\n");
phead = insertEnQueue(phead, 2, 2);
//sort(phead);
printall(phead);
printf("\n");
phead = insertEnQueue(phead, 3, 3);
//sort(phead);
printall(phead);
printf("\n");
phead = insertEnQueue(phead, 4, 4);
//sort(phead);
printall(phead);
printf("\n");
phead = insertEnQueue(phead, 5, 5);
//sort(phead);
printall(phead);
printf("\n");
phead = insertEnQueue(phead, 6, 0);
//sort(phead);
printall(phead);
printf("\n");
phead = insertEnQueue(phead, 7, 0);
printall(phead);
printf("\n");
phead = insertEnQueue(phead, 8, 1);
//sort(phead);
printall(phead);
printf("\n");
phead = insertEnQueue(phead, 9,5);
printall(phead);
printf("\n");
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: