栈的转化与使用 二进制

本文介绍了如何在C语言中实现链式队列的数据结构,包括创建空队列、创建新节点、判断队列是否为空、入队操作、遍历队列以及出栈功能的函数实现。
摘要由CSDN通过智能技术生成

void linkstack_change(datatype num)
{
    LinkStack* sa=linkstack_create();
    datatype sun=num;
    int res;
    while(num !=0)
    {
        res=num%2;
        num=num/2;
        linkstack_push(sa,res);
    }
    while(sa->data.len !=0)
    {
        datatype res=linkstack_pop(sa);
        printf("%d\t",res);
    }
    putchar(10);
    return;
}

/*
 * function:    创建空的链式队列
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Gather* linksequeue_create()
{
    Gather* q=(Gather*)malloc(sizeof(Gather));
    if(NULL == q)
    {
        printf("堆空间申请失败\n");
        return NULL;
    }
    q->head=(Linksequeue*)malloc(sizeof(Linksequeue));
    if(NULL == q->head)
    {
        printf("创建空的链式队列失败\n");
        return NULL;
    }
    q->head->data.len=0;
    q->head->next=NULL;
    q->rear = q->head;
    return q;
}
/*
 * function:    创建新的节点
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Linksequeue* linksequeue_createnew(datatype num)
{
    Linksequeue* new=(Linksequeue*)malloc(sizeof(Linksequeue));
    if(NULL == new)
    {
        printf("创建失败\n");
        return NULL;
    }
    new->data.text=num;
    new->next=NULL;
    return new;
}
/*
 * function:    判空
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int linksequeue_isEmpty(Gather* q)
{
    return q->head == q->rear ? 1:0;
}
/*
 * function:    入队
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void linksequeue_insert(Gather* q,datatype num)
{
    Linksequeue* temp=linksequeue_createnew(num);
    temp->next=q->rear->next;
    q->rear->next=temp;

    q->rear=q->rear->next;
    q->head->data.len++;
    return;
}

/*
 * function:    遍历
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void linksequeue_show(Gather* q)
{
    Linksequeue* p=q->head;
    while(NULL !=p->next)
    {
        p=p->next;
        printf("%d\t",p->data.text);
    }
    printf("\n");
    return;
}
/*
 * function:    出栈
 * @param [ in] 
 * @param [out] 
 * @return      
 */
datatype linksequeue_pop(Gather* q)
{
    if(linksequeue_isEmpty(q))
    {
        printf("栈为空,删除失败\n");
        return (datatype)-1;
    }
    Linksequeue* temp =q->head->next;
    if(temp == q->rear)
    {
        q->rear = q->head;
    }
    q->head->next=temp->next;
    datatype num =temp->data.text;
    free(temp);
    temp=NULL;
    q->head->data.len--;
    return num;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值