• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c语言描述的链队列的基本操作

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
#include<stdio.h>
#include<stdlib.h>
#define ok 0
#define error 1 
//链队列特点在于不仅有链的头指针和尾指针,还有组成链的每一个节点,所以结构体要设置两个
typedef struct qlnode{
    int data;
    struct qlnode *next;
}Qlnode;
typedef struct {
    Qlnode *front;
    Qlnode *rear;
}Ql;
int InitQl(Ql *ql){
    ql->front=ql->rear=(Qlnode *)malloc(sizeof(Qlnode));
    if(!ql->front){
        printf("分配内存失败");
        exit(error);
    }//每一次都要判断分配内存是否成功了
    ql->front->next=NULL;//设置头结点为空
    printf("分配成功!\n");
    return ok;
}
int EnQl(Ql *ql,int e){
    Qlnode *p;
    p=(Qlnode *)malloc(sizeof(Qlnode));
    p->data=e;p->next=NULL;
    ql->rear->next=p;//队尾插入p
    ql->rear=p;//另p为队尾
    return ok;
}

int DeQl(Ql *ql){
    int e;
    Qlnode *p;
    if(ql->front=ql->rear){//空的链队列的判决条件为头指针和尾指针均指向头结点
        printf("链队列为空");
        exit(error);
    }
    p=ql->front->next;
    e=p->data;
    ql->front->next=p->next;//重新赋予头结点后的第一个结点
    free(p);
    return ok;

}
int  Destroy(Ql *ql){
    while(ql->front){
        ql->rear=ql->front->next;
        free(ql->front);
        ql->front=ql->rear;//通过ql->rear来保存队头释放之前的下一节点,然后赋给下一次循环的新队头;
    }
}
int Traverse(Ql *ql){
    Qlnode *p=ql->front->next;
    while(p){
        printf("%d \n",p->data);
        p=p->next;
    };
}
void main(){
    Ql ql;
    int i,j;
    j=0;
    InitQl(&ql);
    while(j<5){
        printf("输入要插入的值:\n");
        scanf("%d",&i);
        EnQl(&ql,i);
        j++;
    }
    printf("\n");
    Traverse(&ql);
    //printf("%d \n",(ql.front->next)->data);ql->front->next->data,这样就不对因为ql不是指针,应该使用ql.xxx
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C实战:项目构建Make,Automake,CMake发布时间:2022-07-14
下一篇:
C获取文件大小stat()发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap