2024-1-25-数据结构作业

要求:

源代码:

1.双向链表按任意位置插入

DoubleLink insert_next(DoubleLink head,char element,int pos)
{
    int len=list_length(head);
    if(pos<1 || pos>len+1)
    {
        return head;
    }
    else if(pos==1)
    {
        DoubleLink s=create();
        s->data=element;
        head=insert_head(head,element); 
        return head;       
    }
    else
    {
        DoubleLink p=head;
        for(int i=1;i<pos-1;i++)
        {
            p=p->next;
        }
        DoubleLink s=create();
        s->data=element;
        s->next=p->next;
        p->next=s;
    }
    return head;

}
效果图:

2.双向链表按任意位置删除

DoubleLink delete_next(DoubleLink head,int pos)
{
    if(NULL==head)
    return NULL;
    int len=list_length(head);
    if(pos<1 || pos>len)
    {
        printf("Pos is error\n");
        return head;
    }
    else if(pos==1)
    {
        head=delete_head(head);
        return head;       
    }
    else
    {  
        DoubleLink p=head;
        for(int i=1;i<pos -1 ;i++)
        {
            p=p->next;
        }
        DoubleLink s=p->next;
        p->next=s->next;
        free(s);
        s=NULL;
        return head;
    }
}
效果图:

3.主函数main.c

#include"head.h"
int main(int argc,char *argv[])
{

DoubleLink head=NULL;
int n;
datatype element;
printf("please enter n:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
    printf("please enter %d element:",i+1);
    scanf("  %c",&element);
    //head=insert_head(head,element);
    head =insert_rear(head,element);
}    
output(head);
    puts("");
//head=delete_head(head);
//head=delete_rear(head);
//output(head);

int pos;
// printf("please enter insert_pos:");
// scanf("%d",&pos);
// printf("please enter element");
// scanf(" %c",&element);
// head=insert_next( head, element, pos );
// output(head);

printf("please enter delete_pos:");
scanf("%d",&pos);
head=delete_next( head, pos );
output(head);









    return 0;
}

4.功能函数test.c

#include"head.h"

DoubleLink create()
{
    DoubleLink s=(DoubleLink)malloc(sizeof(struct Node));
    if(s==NULL)
        return NULL;
        s->data=0;
        s->next=NULL;
        s->prev=NULL;
        return s;
}
void output(DoubleLink head)
{
    if(NULL==head)
    {
        printf("DoubleList is empty!\n");
        return;
    }

    DoubleLink p=head;
     //反向输出
    while(p->next!=NULL)
    {
        printf("%-5c",p->data);
        p=p->next;
    }
    printf("%-5c ",p->data);
    puts("");
    //正向输出
    // while(p!=NULL)
    // {
    //     printf("%-5c",p->data);
    //     p=p->prev;
    // }  
    // puts("");
}

DoubleLink insert_head(DoubleLink head , datatype element)
{
    DoubleLink s=create();
    s->data=element;
    if(NULL==head)
        head=s;
    else
    {
        s->next=head;
        head->prev=s;
        head=s;
    }
    return head;
}
DoubleLink insert_rear(DoubleLink head , datatype element)
{
    DoubleLink s=create();
    s->data=element;
    if(NULL==head)
        head=s;
    else
    {
        DoubleLink p =head;
        while(p->next!=NULL)
        {
                p=p->next;
        }
        p->next=s;
        s->prev=p;
    }
    return head;
}

DoubleLink delete_head(DoubleLink head)
{
    if(NULL==head)
    return NULL;
        
    else if(head->next==head->prev)
    {
        free(head);
        head=NULL;
        return head;
    }

    DoubleLink del=head;
    head=head->next;
    head->prev=NULL;
    free(del);
    del=NULL;
    return head;

}
DoubleLink delete_rear(DoubleLink head)
{
    if(NULL==head)
    return NULL;
    
    else if(head->next==head->prev)
    {
        free(head);
        head=NULL;
        return head;
    }

    DoubleLink p=head;
    while(p->next!=NULL)
    {
        p=p->next;
    }
    DoubleLink del=p;    
    p->prev->next=NULL;
    free(del);
    del=NULL;
    
    return head;

}

int list_length(DoubleLink head)
{
    int len=0;
    DoubleLink p=head;
    while(p!=NULL)
{
    p=p->next;
    len++;
}
    return len;
}

DoubleLink insert_next(DoubleLink head,char element,int pos)
{
    int len=list_length(head);
    if(pos<1 || pos>len+1)
    {
        return head;
    }
    else if(pos==1)
    {
        DoubleLink s=create();
        s->data=element;
        head=insert_head(head,element); 
        return head;       
    }
    else
    {
        DoubleLink p=head;
        for(int i=1;i<pos-1;i++)
        {
            p=p->next;
        }
        DoubleLink s=create();
        s->data=element;
        s->next=p->next;
        p->next=s;
    }
    return head;

}
DoubleLink delete_next(DoubleLink head,int pos)
{
    if(NULL==head)
    return NULL;
    int len=list_length(head);
    if(pos<1 || pos>len)
    {
        printf("Pos is error\n");
        return head;
    }
    else if(pos==1)
    {
        head=delete_head(head);
        return head;       
    }
    else
    {  
        DoubleLink p=head;
        for(int i=1;i<pos -1 ;i++)
        {
            p=p->next;
        }
        DoubleLink s=p->next;
        p->next=s->next;
        free(s);
        s=NULL;
        return head;
    }
}

5.头文件head.h

#ifndef  _HEAD_H__
#define _HEAD_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h> 
//定义双向链表结构体
typedef char datatype ;
typedef struct Node
{
    /* data */
    datatype data;
    struct Node *next;
    struct Node *prev;
}*DoubleLink;
void output(DoubleLink head);
DoubleLink insert_head(DoubleLink head , datatype element);
DoubleLink insert_rear(DoubleLink head , datatype element);
DoubleLink delete_head(DoubleLink head);
DoubleLink delete_rear(DoubleLink head);
DoubleLink insert_next(DoubleLink head,char element,int pos);
DoubleLink delete_next(DoubleLink head,int pos);


#endif

思维导图:

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值