第七周项目2-链队算法库

main.cpp

#include<bits/stdc++.h>
#include"liandui.h"
using namespace std;
int main()
{
    liandui *p;
    initliandui(p);
    rudui(p,1);
    rudui(p,2);
    rudui(p,3);
    int a=lianduiempty(p);
    cout<<a<<endl;
    cout<<"出队元素为:"<<chudui(p)<<endl;
    int b=lianduichang(p);
    cout<<"队长为:"<<b<<endl;
    rudui(p,4);
    rudui(p,5);
    rudui(p,6);
    int c=lianduichang(p);
    cout<<"队长为:"<<c<<endl;
    cout<<"出队元素依次为:"<<endl;
    while(!lianduiempty(p))
        cout<<chudui(p)<<endl;
    xiaohui(p);
    return 0;
}

liandui.cpp

#include"liandui.h"
#include<bits/stdc++.h>
using namespace std;
void initliandui(liandui *&p)
{
    p=(liandui *)malloc(sizeof(liandui));
    p->fron=p->rear=NULL;
}
void xiaohui(liandui *&p)
{
    datanode *q,*k;
    if(p->rear==NULL)
    {
        cout<<"就剩一个头了!"<<endl;
        free(p);
        return;
    }
    q=p->fron;
    k=p->fron->next;///如果只剩一个链头节点的话,这个应该就不成立!
    free(p);
    while(k->next!=NULL)
    {
        free(q);
        q=k;
        k=k->next;
    }
    free(k);
}
int lianduiempty(liandui *p)
{
    return (p->rear==NULL);
}
int lianduichang(liandui *p)
{
    datanode *q;
    q=p->fron;
    int k=0;
    while(q!=NULL)
    {
        k++;
        q=q->next;
    }
    return k;
}
void rudui(liandui *&p,int s)
{
    datanode *r;
    r=(datanode *)malloc(sizeof(struct node));
    r->data=s;
    r->next=NULL;
    if(p->rear==NULL)///链队为空并进队的情况
        p->rear=p->fron=r;
    else
    {
        p->rear->next=r;
        p->rear=r;
    }
}
int chudui(liandui *&p)///我一开始写的时候没有将出队的数据节点释放掉,看了书之后又加的
{
    datanode *r;
    if(p->rear==NULL)
        cout<<"链队为空"<<endl;
    if(p->rear==p->fron)
    {
        int y=p->rear->data;
        p->rear=p->fron=NULL;
        return y;
    }
    int h=p->fron->data;
    r=p->fron;
    p->fron=p->fron->next;
    free(r);
    return h;
}

liandui.h

#ifndef LIANDUI_H_INCLUDED
#define LIANDUI_H_INCLUDED
typedef struct node
{
    int data;
    struct node *next;
}datanode;
typedef struct
{
    datanode *fron;
    datanode *rear;
}liandui;
void initliandui(liandui *&p);
void xiaohui(liandui *&p);
int lianduiempty(liandui *p);
int lianduichang(liandui *p);
void rudui(liandui *&p,int s);
int chudui(liandui *&p);

#endif // LIANDUI_H_INCLUDED


运行结果:


知识点总结:

  出队的时候最好把出队节点的空间给释放掉!还有就是在销毁链队的时候要注意需要判断链队是否为空(就是只剩一个链队节点的情况)!

心得体会:

  百尺竿头更进一步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值