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

来源:互联网 发布:淘宝联盟在哪里进入 编辑:程序博客网 时间:2024/06/03 19:04

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_INCLUDEDtypedef 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


运行结果:


知识点总结:

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

心得体会:

  百尺竿头更进一步!

原创粉丝点击