数据结构0710作业

一、思维导图

二、完成链队的剩下操作:出队、长度、销毁的功能函数的封装。

源文件

#include "stackqueue.h"

//1、创建
queueLinkPtr QueLink_create(){
    //在堆区申请链队的大小空间
    queueLinkPtr QL = (queueLinkPtr)malloc(sizeof(queueLink));
    if(QL == NULL){
        printf("申请链队失败!\n");
        return NULL;
    }
    //在堆区申请节点的大小空间
    QL->Head = (NodePtr)malloc(sizeof(Node));
    if(QL->Head == NULL){
        printf("申请节点失败!\n");
        free(QL);
        return NULL;
    }
    QL->Head->len = 0;  //头结点的数据域为0
    QL->Head->Next = NULL;
    QL->Tail = QL->Head;
    printf("创建成功!\n");
    return QL;
}
//2、判空
int QueLink_empty(queueLinkPtr QL){
    //判断所接受的顺序队列是否合法
    if(QL == NULL){
        printf("判空失败!\n");
        return -1;
    }
    return QL->Head == QL->Tail;
}
//3、入队(单链尾插)
int QueLink_into(queueLinkPtr QL, dataType n){
    //判断所接受的顺序队列是否合法
    if(QL == NULL){
        printf("入队失败!\n");
        return 0;
    }
    //申请节点 封装数据
    NodePtr N = (NodePtr)malloc(sizeof(Node));
    if(N == NULL){
        printf("申请节点失败!\n");
        return 0;
    }
    N->data = n;
    N->Next = NULL;
    //尾插 --- 入队
    QL->Tail->Next = N;
    QL->Tail = N;
    QL->Head->len++;  //链表长度自增
    return 1;
}
//4、遍历
void QueLink_show(queueLinkPtr QL){
    //判断所接受的顺序队列是否合法、非空
    if(QL== NULL || QueLink_empty(QL)){
        printf("遍历失败!\n");
        return;
    }
    //定义一个遍历节点的指针
    NodePtr p = QL->Head;
    for(int i=0; i<QL->Head->len; i++){
        p = p->Next;
        printf("%d ", p->data);
    }
    putchar(10);
}
//5、出队(单链头删)
int QueLink_out(queueLinkPtr QL){
    //判断所接受的顺序队列是否合法、非空
    if(QL == NULL || QueLink_empty(QL)){
        printf("出队失败!\n");
        return 0;
    }
    //定义一个指针 指向第一个普通节点
    NodePtr p = QL->Head->Next;
    QL->Head->Next = p->Next;
    free(p);
    p = NULL;
    if(QL->Head->Next = NULL)
        QL->Tail = QL->Head;
    QL->Head->len--;  //链表长度自减
    return 1;
}
//6、队长
int QueLink_size(queueLinkPtr QL){
    //判断所接受的顺序队列是否合法
    if(QL == NULL){
        printf("获取失败!\n");
        return 0;
    }
    return QL->Head->len;
}
//7、销毁
void QueLink_destory(queueLinkPtr QL){
    //判断所接受的顺序队列是否合法
    if(QL == NULL){
        printf("销毁失败!\n");
        return;
    }
    while(QL->Head->Next != NULL)
        QueLink_out(QL);
    free(QL->Head);
    free(QL);
    QL = NULL;
    printf("销毁成功!\n");
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值