作业4.6

题1
void zy(Linklista,datatype n,datatype k,datatype m){
int i,j;
//N个人标号
for(i=1;i<=n;i++){
Linklist
x=a;
wcr(a,i);
}
Linklistx=a;
while(x->next!=a){
x=x->next;
}
//删除头
Linklist
y=a;
x->next=y->next;
free(y);
//找到第一个人
while(x->data.text!=1){
x=x->next;
}
// printf(“%d\n”,x->data.text);
i=1;
while(i!=k){
x=x->next;
i++;
}
printf(“%d\n”,x->data.text);
j=n;
while(j!=0){
//for(i=1;i<m-1;i++)
i=1;
while(i!=m-1){
x=x->next;
i++;
}
// printf(“%d\n”,x->data.text);
printf(“%d\t”,x->next->data.text);
Linklist*z=x->next;
x->next=z->next;
free(z);z=NULL;
x=x->next;

// printf(“%d\n”,x->data.text);
j=j-1;
}

}
题2

/*
typedef int datatype;
typedef struct node{//必须是有名结构体,否则指针域的类型不清楚

datatype data;//数据域,存储有效数据的

struct node *next;

}
/
/

  • function创建一个链表

  • @param [ in]

  • @param [out]
    /
    #include <stdio.h>
    #include"./03_linlist.h"
    #include<stdlib.h>
    Linklist
    create_linklist(){
    Linklist* head=(Linklist*)malloc(sizeof(Linklist));//申请一个堆空间
    if(NULL == head){
    printf(“头结点申请失败,链表创建失败\n”);
    return NULL;
    }
    //将头结点进行初始化
    head->data.len=0;
    head->next=NULL;
    head->prev=NULL;
    return head;
    }
    /*

  • function创建一个链表

  • @param [ in]

  • @param [out]
    /
    void cr(Linklist
    head,datatype num){
    Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
    if(NULL == temp){
    printf(“创建新结点失败,插入失败\n”);
    return;
    }
    //将结点进行初始化
    temp->data.text=num;
    temp->next=NULL;
    temp->prev=NULL;
    //将新的结点插法插入链表
    temp->next=head->next;
    head->next=temp;

    temp->prev=head;
    if(temp->next!=NULL){
    (temp->next)->prev=temp;
    }
    head->data.len++;
    return;
    }
    void wcr(Linklisthead,datatype num){
    Linklist
    a=(Linklist*)malloc(sizeof(Linklist));
    if(NULL==a){
    printf(“创建新结点失败,插入失败\n”);
    return;
    }
    //将结点初始化
    a->data.text=num;
    a->next=NULL;
    a->prev=NULL;
    //找到尾结点
    Linklist*p=head;
    while(p->next!=NULL){
    p=p->next;
    }
    //尾插法插入数据
    a->next=p->next;
    p->next=a;

    a->prev=p;
    head->data.len++;
    return;
    }
    void bl(Linklist* head){
    Linklistp=head;
    while(p->next!=NULL){
    p=p->next;
    printf(“%d\t”,p->data.text);
    }
    printf(“\n”);
    return;
    }
    void tsc(Linklist
    head){
    Linklistx=head;
    if(x->next==NULL){
    return;
    }
    Linklist
    y=(x->next)->next;
    //删除
    Linklist*z=head->next;
    x->next=y;
    y->prev=x;
    free(z);//释放申请的堆空间
    head->data.len–;
    return;
    }

void wsc(Linklisthead){
Linklist
x=head->next;
Linklist*y=head;
while(x->next!=NULL){
x=x->next;
y=y->next;
}
free(x);
y->next=NULL;
head->data.len–;
return;
}

void wzcr(Linklista,datatype b,datatype c){
Linklist
z=(Linklist*)malloc(sizeof(Linklist));
if(NULL==z){
printf(“创建新结点失败,插入失败\n”);
return;
}
Linklist*x=a;
if(b<1||b>a->data.len+1){
printf(“插入位置超过链表长度\n”);
return;
}
for(int i=0;i<b-1;i++){
x=x->next;
}
//初始化
z->data.text=c;
z->next=NULL;
z->prev=NULL;
//插入
z->next=x->next;
x->next=z;
z->prev=x;
if(z->next!=NULL){
z->next->prev=z;
}
a->data.len++;
return;
}

void wzsc(Linklista,datatype b){
Linklist
x=a;
if(a->next==NULL){
printf(“链表为空”);
return;
}
if(b<1||b>a->data.len){
printf(“超过值”);
return;
}
for(int i=0;i<b-1;i++){
x=x->next;
}
Linklist* y=x->next;
x->next=y->next;
if(x-next!=NULL){
x->next->prev=x->prev
}
free(y);
y=NULL;
a->data.len–;
}

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值