您的位置:首页 > 其它

假设以带头结点的循环链表表示队列, 并且只设一个指针指向队尾元素结点(注意不设头指针) 试编写相应的队列初始化,入队列和出队列的算法

2015-05-15 22:15 1356 查看
数据结构算法题(假设以带头结点的循环链表表示队列,

并且只设一个指针指向队尾元素结点(注意不设头指针)

试编写相应的队列初始化,入队列和出队列的算法!)

/*  数据结构算法题(假设以带头结点的循环链表表示队列,
*  并且只设一个指针指向队尾元素结点(注意不设头指针)
*  试编写相应的队列初始化,入队列和出队列的算法!)
*/

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define OK 1
#define ERROR 0

typedef int QElemType;
typedef int Status;

typedef struct QNode
{
QElemType data;
struct QNode * rear;
struct QNode * next;
}QNode,*LinkQueue;

//链式队列的初始化
Status InitLinkQueue(LinkQueue * L)
{

(*L)=(LinkQueue)malloc(sizeof(QNode));
if((*L)==NULL)
{
printf("内存分配失败!\n");
return OK;
}
(*L)->rear=(*L);
return OK;
}

//链式队列的建立
Status Create(LinkQueue * L,int n)
{
srand(time(0));
LinkQueue P;
for(int i=0;i<n;i++)
{
P=(LinkQueue)malloc(sizeof(QNode));
P->data=rand()%100+1;
(*L)->rear->next=P;
(*L)->rear=P;
}
P->next=(*L);
return OK;
}

//入队操作
Status EnQueue(LinkQueue * L,QElemType e)
{
LinkQueue P;
P=(LinkQueue)malloc(sizeof(QNode));
P->data=e;
P->next=(*L);
(*L)->rear->next=P;
(*L)->rear=P;
return OK;
}

//出队操作
Status DeQueue(LinkQueue * L,QElemType * e)
{
LinkQueue temp;
*e=(*L)->next->data;
temp=(*L)->next;
(*L)->next=(*L)->next->next;
delete(temp);
return OK;

}

//输出
void Print(LinkQueue * L)
{
LinkQueue P;
P=(*L)->next;
printf("输出元素:\n");
while(P!=(*L))
{
printf("%d ",P->data);
P=P->next;
}
printf("\n");
}

int main()
{
LinkQueue L;
int ElemNumber;
QElemType EnElem,DeElem;
InitLinkQueue(&L);
printf("请输入元素个数:\n");
scanf("%d",&ElemNumber);
Create(&L,ElemNumber);
Print(&L);
printf("请输入入队元素:\n");
scanf("%d",&EnElem);
EnQueue(&L,EnElem);
Print(&L);
printf("出队操作,并返回出队元素:\n");
DeQueue(&L,&DeElem);
printf("出队元素为:%d\n",DeElem);
Print(&L);
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐