6.4zuoye

顺序队列

//创建顺序表
                                                                 

seqlist* creat_seqlist()
{
    seqlist* sq =(seqlist*)malloc(sizeof(seqlist));
    if(sq==NULL)
    {
        printf("堆空间没有申请成功\n");
        return NULL;
    }
    sq->head=0;
    sq->tail=0;
    return sq;
}

//顺序表的数据输入

void in_seqlist(seqlist*stru,datatype n)
{
    if((stru->tail+1)%(N+1)==stru->head)
    {
        printf("顺序表已满\n");
    }
    else
    {
    stru->data[stru->tail]=n;
    stru->tail++;
    }
    if(stru->tail==N+1)
    {
        stru->tail=0;
    }
}


//顺序表的数据删除
datatype out_seqlist(seqlist*stru)
{
    datatype data;
    if(stru->head==stru->tail)
    {
        printf("顺序表为空\n");
    }   
    else
    {
        data=stru->data[stru->head++];
        
    }
    if(stru->head==N+1)
    {
        stru->head=0;
    }   
    return data;                                                   
}   
//遍历输出
void show_seqlist(seqlist*stru)
{
    if(stru->head==stru->tail)
    {
        printf("顺序表为空\n");
    }   
    
    for(int n=stru->head;n!=stru->tail;n++)
    {
        if(n==N+1)
        {
            n=0;
            
        }   
    //  printf("head=%d,tail=%d,n=%d\n",stru->head,stru->tail,n);
        if(n==stru->tail)
        {
            break;
        }   
        printf("data[%d]=%d\n",n,stru->data[n]);
    }
}

双向链表

 
 //创在头地址
 linklist* creat_linklist()
 {
     linklist* ld=(linklist*)malloc(sizeof(linklist));
     if(ld==NULL)
     {
         printf("空间申请失败\n");
         return NULL;
     }
     ld->next=NULL;
     ld->next=NULL;
     ld->txt.len=0;
     return ld;
 }
 
 //头插法
 void head_in(linklist*head,datatype num)
 {
 
     linklist*temp=(linklist*)malloc(sizeof(linklist));
     if(temp==NULL)
     {
         printf("空间申请失败\n");
         return;
     }
     if(head->next==NULL)
     {
     temp->txt.data=num;
     temp->next=head->next;
     temp->prev=head;
     head->next=temp;
     head->txt.len++;
     return;
     }
     else                                                        
     {
         temp->txt.data=num;
         temp->next=head->next;
         head->next=temp;
         temp->prev=temp->next->prev;
         temp->next->prev=temp;
         head->txt.len++;
 
     }
}



//尾插法
void tail_in(linklist*head,datatype num)
{

    linklist*temp=(linklist*)malloc(sizeof(linklist));
    if(temp==NULL)
    {
        printf("空间申请失败\n");
        return;
    }
    linklist*tail=head;
    for(;tail->next!=NULL;)
    {
        tail =tail->next;
    }
    temp->txt.data=num;
    temp->next=tail->next;
    tail->next=temp;
    temp->prev=tail;
    head->txt.len++;
    return;
}
//遍历
void show_linklist(linklist*head)
{
    linklist*show=head;
    for(;show->next!=NULL;)
    {
        show=show->next;
        printf("%d\n",show->txt.data);
    }
    printf("链表长度:%d\n",head->txt.len);
    return;
}

//头删
void dele_head(linklist*head)
{
    if(NULL==head->next||NULL==head)
    {                                                     
        printf("链表为空,或者地址为空\n");
        return;
    }
    linklist* temp=head->next;
    head->next=temp->next;
    if(NULL!=temp->next)
    {
        temp->next->prev=temp->prev;
    }
    free(temp);
    head->txt.len--;
    return;
}
//尾删
void dele_tail(linklist*head)
{

    if(NULL==head->next||NULL==head)
    {
        printf("链表为空,或者地址为空\n");
        return;
    }
    linklist*temp=head;
    for(;temp->next->next!=NULL;)
    {
        temp=temp->next;
    }

    linklist*tail=temp->next;
    temp->next=NULL;
    free(tail);
    head->txt.len--;
    return;
}

//中间插入
void mind_in(linklist*head,int w,datatype num)
{
    if(w<1||w>head->txt.len+1)
    {
        printf("插入位置有误");
        return;                                           
    }
    linklist*temp=head;
    for(int n=0;n<w-1;n++)
    {
    temp=temp->next;
    }
    linklist*in=(linklist*)malloc(sizeof(linklist));
    in->next=temp->next;
    in->txt.data=num;
    temp->next=in;
    if(in->next==NULL)
    {
        in->prev=temp;
    }
    else
    {
        in->prev=in->next->prev;
        in->next->prev=in;
    }
    head->txt.len++;
    return;
}


//中间删除
void mind_out(linklist*head,int w)
{

    if(w<1||w>head->txt.len)                           
    {
        printf("删除位置有误\n");
        return;
    }
    linklist*temp=head;
    for(int n=0;n<w-1;n++)
    {
        temp=temp->next;
    }
    linklist*out=temp->next;
    temp->next=out->next;
    if(temp->next!=NULL)
    {
        temp->next->prev=temp;
    }
    free(out);
    head->txt.len--;
    return;

}

顺序栈


//创建顺序表


seqlist* creat_seqlist()
{
    seqlist* sq =(seqlist*)malloc(sizeof(seqlist));
    if(sq==NULL)
    {
        printf("堆空间没有申请成功\n");
        return NULL;
    }
    sq->num=0;
    return sq;
}

//顺序表的数据输入

void in_seqlist(seqlist*stru,datatype n)
{
    if(stru->num>=N)
    {
        printf("顺序表已满\n");
    }
    if(stru->num<N)
    {
    stru->data[stru->num++]=n;
//  printf("num=%d\n",stru->num);
//  stru->num++;
    }
}

//顺序表的数据删除


datatype out_seqlist(seqlist*stru)
{
    datatype data;
    if(stru->num<=0)
    {
        printf("顺序表为空\n");
    }
    if(stru->num>0)
    {
//  printf("num=%d\n",stru->num);
        data=stru->data[--stru->num];

    }                                                           
    return data;
}


//遍历输出
void show_seqlist(seqlist*stru)
{
    if(stru->num<=0)
    {
        printf("顺序表为空\n");
    }
    for(int n=0;n<stru->num;n++)
    {
        printf("data[%d]=%d\n",n,stru->data[n]);
    }


}

链式队列

//创造头节点
liandui* creat_liandui()
{
    liandui* qp=(liandui*)malloc(sizeof(liandui));
    if(NULL==qp)
    {
        printf("空间申请失败\n");
        return NULL;
    }
    linklist* head=(linklist*)malloc(sizeof(linklist));
    if(NULL==head)
    {
        printf("空间申请失败\n");
        return NULL;
    }
    linklist* tail=head;
    qp->head=head;
    qp->tail=tail;
    return qp;
}
//尾插

void tail_in(liandui*qp,datatype data)
{
    linklist*temp=(linklist*)malloc(sizeof(linklist));
    if(NULL==temp)
    {
        printf("空间申请失败\n");
        return ;
    }
    temp->data=data;
    temp->next=qp->tail->next;
    qp->tail->next=temp;
    qp->tail=qp->tail->next;
}                                                                                  

//判空
datatype pan_kong(liandui*qp)
{
    if(qp->head==qp->tail)
    {                                                        
        printf("链队为空\n");
        return (datatype)1;
    }
    return (datatype)0;
}

//头删
void head_out(liandui*qp)
{
    if(pan_kong(qp))
    {
        printf("队列为空\n");
        return;
    }
    linklist*temp=qp->head->next;
    qp->head->next=qp->head->next->next;
    if(NULL==qp->head->next)
    {
        qp->tail=qp->head;
    }
    return;
}
//遍历
void show_liandui(liandui*qp)
{
    linklist*temp=qp->head->next;
    while(temp!=NULL)
    {
        printf("%d\n",temp->data);
        temp=temp->next;
    }
    return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值