动态分配链式存储结构
#define ElemType char
typedef struct Qnode{
ElemType data;
struct Qnode *next;
}Qnode;
struct QueueLink{
Qnode *front,*rear;
};
基本操作
初始化
void QueueLink_Init(QueueLink &Q){
Q.front =Q.rear=(Qnode *)malloc(sizeof(Qnode));
Q.front->next=NULL;
}
创建队
void QueueLink_Creat(QueueLink &Q){
printf("输入队列成员个数:");
int num=0;
scanf("%d",&num);
getchar();
while(num--){
Qnode *s=(Qnode *)malloc(sizeof(Qnode));
printf("请输入入队成员:\n");
scanf("%c",&s->data);
getchar();
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
}
}
入队
void QueueLink_Push(QueueLink &Q,ElemType newval){
Qnode *s=(Qnode *)malloc(sizeof(Qnode));
s->data=newval;
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
}
出队
void QueueLink_Pop(QueueLink &Q,ElemType &x){
if(Q.front->next==NULL){
printf("队空 出队失败\n");
}
else{
x=Q.front->next->data;
Qnode *p=Q.front->next;
Q.front->next=p->next;
if(p==Q.rear){
Q.rear=Q.front;
}
free(p);
printf("出队成功\n");
}
}
读取队头元素
ElemType QueueSq_GetTopval(QueueSq Q){
if(){
printf("队空,读取队头元素失败\n");
}
else{
printf("读取队头元素成功\n");
return
}
}
求队列长度
int QueueLink_Length(QueueLink Q){
int num=0;
Qnode *p=Q.front;
while(p!=Q.rear){
num++;
p=p->next;
}
return num;
}
判空
void QueueLink_Isvoid(QueueLink Q)
{
if(Q.front->next==NULL){
printf("队为空\n");
}
else{
printf("队不为空\n");
}
}
打印队列
void QueueLink_Print(QueueLink Q){
if(Q.front->next==NULL){
printf("打印失败\n");
}
else{
Qnode *p=Q.front;
while(p->next!=NULL){
p=p->next;
printf("%c ",p->data);
}
printf("打印成功\n");
}
}
代码实现结果
int main()
{
QueueLink Q;
QueueLink_Init(Q);
QueueLink_Creat(Q);
QueueLink_Isvoid(Q);
QueueLink_Print(Q);
printf("队头元素为:%c\n",QueueLink_GetTopval(Q));
ElemType x;
QueueLink_Pop(Q,x);
QueueLink_Print(Q);
printf("队列长度为:%d\n",QueueLink_Length(Q));
QueueLink_Push(Q,x);
QueueLink_Print(Q);
}