数据结构(顺序队列,链队列)

//顺序队列


#define MAXSIZE 100
int flag = 0; //入队成功标识1,出队就标识0

typedef struct sqQueue {
    int front;
    int rear;
    int *base;
} sqQueue;

bool initqueue(sqQueue &q) {
    q.base = (int *)malloc(MAXSIZE * sizeof(int));
    if (!q.base) {
        return 0;
    }
    q.front = q.rear = 0;
    return 1;
}//入队

bool enqueue(sqQueue &q, int e) {
    //判断队满
    if (q.front == q.rear && flag == 1) {
        return 0;
    }
    q.base[q.rear] = e;
    q.rear = (q.rear + 1) % MAXSIZE;
    flag = 1;
    return 1;
}

//出队
bool outqueue(sqQueue &q, int &e) {
    //判断队空
    if (q.front == q.rear && flag == 0) {
        return 0;
    }
    e = q.base[q.front];
    q.front = (q.front + 1) % MAXSIZE;
    flag = 0;
    return 1;

}

//求队列长度
int queuelength(sqQueue q) {
    int length;
    if (q.front == q.rear && flag == 1) {
        length = MAXSIZE;
    } else {
        length = (q.rear - q.front + MAXSIZE) % MAXSIZE;
    }
    return length;
}


//队列链表


typedef struct QNode{
    int data;
    struct QNode* next;
}QNode,*QueuePtr;
typedef struct{
    *QueuePtr front;
    *QueuePtr rear;
}LinkQueue;

链队列初始化
bool InitQueue(LinkQueue &Q){
    Q.front=(QueuePtr)malloc(sizeof(QNode));
    if(!Q.front){
        return 0;
    }
    Q.front->next=NULL;
    Q.rear=Q.front;
    return 1;
}

进队列
bool EnQueue(LinkQueue %Q,e){
    QueuePtr p=(QueuePtr)malloc(sizeof(QueuePtr));
    p->data=e;
    p->next=Q.rear->next;
    Q.rear->next=p;
    Q.rear=p
    return 1;}

出队列
bool DeQueue(LinkQueue&Q,&e){
    if(Q.rear==Q.front){
        printf("队列已满");
        return 0;
    }
    QueuePtr p=Q.front->next;
    Q.front->next=p->next ;
    e=p->data;
    if(Q.rear==p){
        Q.rear=Q.front;    
    }
    free(p);
    return 1;
}


//Q1男生女生跳舞配对问题


typedef struct Person{
    char sex;
    char name[10];
}QElemtype;
void DancerPartner(QElemtype dancer[],int num){//dancer[]是人员信息,num是人数
   LinkQueue boys,girls;
   InitQueue(boys);
   InitQueue(girls);
   for(int i=0;i<num;i++){
   QElemtype p=    dancer[i];
   if(p.sex=='W'){
       EnQueue(girls,p);
    }
   else if(p.sex=='M'){
       EnQueue(boys,p);
   }
   else{
       printf("输入的性别有误");
       continue;
   }
   }
   printf("配对成功的人是:");
   while(!QueueEmpty(girls)&&!QueueEmpty(boys)){
       DeQueue(girls,p);
       printf("女生:%s",p.name);
       DeQueue(bors,p);
       printf("男生:%s",p.name);
       printf("成功配对");
   }
   while(!QueueEmpty(girls)){
       printf("还有%d名女生没舞伴",QueueLength(girls));
       GetHead(girls,p);//取头这个我认为直接DeQueue就行
       printf("下一位最先配对的女生是%s",p->name);
   }
   while(!QueueEmpty(boys)){
       printf("还有%d名男生没舞伴",QueueLength(boys));//取长度我认为与单链表相同while(p){length++;}
    GetHead(boys,p);
       printf("下一位最先配对的男生是%s",p->name);
   }    
}
int main(){
    QElemtype dancer[30];
    int n;
    printf("共有%d个人排队",n);
    for(int i=0;i<n;i++){
        printf("请输入姓名");
        scanf("%s",dancer[i].name);
        printf("请输入sex,男生用M,女生用W");
        scanf("%c",dancer[i].sex);
    }
      DancerPartner(dancer,n);
}
//函数中参数是数组的调用方式,就是说调用的时候都是光一个数组名
//void processArray(char *array)
//  processArray(array);
//
//void processArray(char array[], int length)
//  processArray(array, strlen(array));
//
//void processArray(char array[10]) 
//  processArray(array);
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值