C语言 数据结构之链队(基本操作)

本文详细介绍了如何使用C语言实现链队的数据结构,涵盖了链队的初始化、元素入队、出队以及判空等核心操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文涉及的链队操作有如下:

  1. 链队的初始化
  2. 链队元素的入队
  3. 链队元素的出队
  4. 链队元素的判空
/*链队test*/
#include<iostream>
#include<stdlib.h>
typedef int status;
typedef int ElemType;
typedef struct Qnode{
    ElemType data;
    struct Qnode *next;
}QNode,*Queueptr;
typedef struct Numpoint{
    QNode *rear;
    QNode *front;
}LinkQueue;
//初始化
status initQueue(LinkQueue &q){
     q.rear=q.front=(Queueptr) malloc(sizeof(QNode));
     q.front->next=NULL;
     return 1;
}
//入队
void EnQueue(LinkQueue &q){
     Queueptr p;
     int n;
     printf("请输入入队元素个数:");
     scanf("%d",&n);
     for(int i;i<n;i++){
        p=new QNode;
        printf("请输入第%d个数字:",i+1);
        scanf("%d",&p->data);
        p->next=NULL;
        q.rear->next=p;
        q.rear=p;        
     }
}
//判断是否为空(涉及出队)
status QueueEmpty(LinkQueue &q,ElemType &e){
     Queueptr p;
     if(q.front==q.rear)return 0;
     else {
     e=q.front->next->data;
     p=q.front->next;
     q.front->next=q.front->next->next;
     delete p;
     return 1;
     }
}
//出队
void DeQueue(LinkQueue &q){   
    ElemType e;
    int n,flag;
    printf("请输入出队的个数:");
    scanf("%d",&n);
    for(int i=0;i<n;i++){
    flag=QueueEmpty(q,e);
    if(flag){
        printf("%d\t已出队!!\n",e);
    }
    else{
        printf("队列已空!\n");break;
    }
    }
}
//判断队列是否为空(涉及获得队头元素)
status Empty(LinkQueue q){
    if(q.front==q.rear)return 0;
    else return 1;
}
//获得队头元素
void GetFront(LinkQueue &q){
    int flag;
    ElemType e;
    flag=Empty(q);
    e=q.front->next->data;
    if(flag)
     printf("队头元素为:%d\n",e);
     else printf("队头元素为空!!\n");
}
//菜单
void menu(){
    printf("——————————操作代码——————————\n");
    printf("入队————1\t出队————2\t获得队首————3\t退出————0\n");
    printf("——————————操作代码——————————\n");
}
int main(){
    int c;
    LinkQueue q;
    initQueue(q);
    while(1){
       menu();
       printf("请输入操作代码:");
       scanf("%d",&c);
       if(c==0)break;
       switch(c){
           case 1:EnQueue(q);break;
           case 2:DeQueue(q);break;
           case 3:GetFront(q);break;
           default : printf("操作代码不在范围内!!\n");
       }
    }
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值