6.4顺序栈的作业

1.顺序队

//创建一个顺序队
link* chuang(){
    link*haed=(link*)malloc(sizeof(link));
    if(haed==NULL){
        printf("创建失败");
        return NULL;
    }
    haed->next=0;
    haed->tpye=0;
    return haed;
}

//判满
int panduan(link*haed){
    return (haed->tpye+1)%(n+1)==haed->next ?1:0;
}

//入队
void rdui(link*haed,datatpye sun){
    if(panduan(haed)==1){
        printf("顺序栈以满\n");
        return;
    }
    haed->ddta[haed->tpye]=sun;
    haed->tpye=(haed->tpye+1)%(n+1);
    return;
}
//判空
int pankong(link*haed){                                 
    return haed->tpye==haed->next ?1:0;
}

//出队
datatpye cdui(link*haed){
    if(pankong(haed)==1){
        printf("顺序栈为空");
        return (datatpye)-1;
    }
    datatpye p=haed->ddta[haed->next];
    haed->next=(haed->next+1)%(n+1);
    return p;
}                                                       
//计算个数
int jishuan(link*haed){
    return (haed->tpye-haed->next+(n+1))%(n+1);
}

void bianli(link*haed){
    for(int i=haed->next;i!=haed->tpye;i=(i+1)%(n+1)){
        printf("%d ",haed->ddta[i]);
    }
    putchar(10);
    return;
}
                      

顺序队的实现

2.顺序栈

 link* chuangjian(){
     link*haed=(link*)malloc(sizeof(link));
     if(haed==NULL){
         printf("创建失败\n");
         return NULL;
     }
     haed->pos=0;
     return haed;
 }
 //判满
 int panman(link*q){
     return q->pos == n?1:0;
 }
 //入栈
 void cha(link*haed,datatype sun){
     if(panman(haed)){
         printf("顺序栈为满\n");
         return;
     }
     haed->data[haed->pos]=sun;
     haed->pos++;
     return;
 }
 //判空                                      
 int pankong(link*q){
     return q->pos == 0?1:0;
 }
 //出栈
 int chu(link*haed){
    if(pankong(haed)==1){
        printf("顺序栈为空\n");
    }                                     
    haed->pos--;
    return haed->data[haed->pos];
}

void bianli(link*haed){
    for(int i=0;i<haed->pos;i++){
        printf("%d  ",haed->data[i]);
    }
    putchar(10);
    return;
}

实现

3.双向链表

 link* toujiedian(){
     link*haed=(link*)malloc(sizeof(link));
     if(haed==NULL){
         printf("创建失败\n");
         return NULL;
     }
     haed->msg.len=0;
     haed->next=NULL;
     haed->prve=NULL;
 
     return haed;
 }
 //头插法
 void toucha(link*haed,datatype n){
     link*p=(link*)malloc(sizeof(link));   
     if(p==NULL){
         printf("创建失败\n");
         return;
     }
     p->msg.data=n;
     p->next=NULL;
     p->prve=NULL;
 
     if(haed->next==NULL)
     {p->next=haed->next;
         haed->next=p;
         p->prve=haed;
     }
     else{
         p->next=haed->next;
         haed->next=p;
 
         p->next->prve=p;
         p->prve=haed;
     
     }
     haed->msg.len++;
     return;
 }
 //尾插
 void weicha(link*haed,datatype n){
     link*temp=(link*)malloc(sizeof(link));
     if(temp==NULL){
         printf("创建失败\n");
         return;
     }                                         
     temp->msg.data=n;
     temp->next=NULL;
     temp->prve=NULL;
 
     link*p=haed;
     while(p->next!=NULL){
         p=p->next;
     }
     temp->next=p->next;
     p->next=temp;
     temp->prve=p;
     haed->msg.len++;
     return;
 }
 //按位置插入
 void anweizhicha(link*haed,int x,datatype n){
     if(x<1||x>haed->msg.len+1){
         printf("插入位置非法");
         return;
     }
 
     link*temp=(link*)malloc(sizeof(link));
     if(temp==NULL){
         printf("创建失败\n");
         return;
     }
     temp->msg.data=n;
     temp->next=NULL;
     temp->prve=NULL;
     link*p=haed;
     for(int i=0;i<x-1;i++){
         p=p->next;
     }
     if(p->next==NULL){
         temp->next=p->next;
         p->next=temp;
         temp->prve=p;
     }
     else{
         temp->next=p->next;
         p->next=temp;
 
         temp->next->prve=temp;
         temp->prve=p;
     }
     haed->msg.len++;
     return;
 }                                           
 //头删
 datatype toushan(link*haed){
     if(haed->next==NULL){
         printf("链表为空");
         return (datatype)-1;
     }
     link*p=haed->next;
     if(p->next==NULL){
         haed->next=NULL;
     }
     else{
         haed->next=p->next;
         p->next->prve=haed;
     }
     datatype n=p->msg.data;
     free(p);
     haed->msg.len--;
     return n;
 }
 //尾删
 datatype weishan(link*haed){
     if(haed->next==NULL){
         printf("链表为空");
         return (datatype)-1;
     }
     link*p=haed;
     while(p->next!=NULL){
         p=p->next;
     }
     p->prve->next=NULL;
     datatype n=p->msg.data;
     free(p);
     haed->msg.len--;
     return n;
 }
 //按位置删                                 
 datatype anweishan(link*haed,int n){
     if(n<1||n>haed->msg.len){
         printf("删除位置有误");
         return (datatype)-1;
     }
     if(haed->next==NULL){
         printf("链表为空");
         return(datatype)-1;
     }
     link*p=haed;
     for(int i=0;i<n;i++){
         p=p->next;
     }
     if(p->next==NULL){
         p->prve->next=NULL;
     }
     else{
         p->prve->next=p->next;
         p->next->prve=p->prve;
     }
     datatype x=p->msg.data;
     free(p);
     haed->msg.len--;
     return x;
 }
 //遍历
 void bianli(link*haed){
     link*p=haed;
     while(p->next!=NULL){
         p=p->next;
         printf("%d  ",p->msg.data);
     }
     printf("\n");
     return;
 }
                                            

实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值