【数据结构】双向链表

一、main函数

#include <stdio.h>
#include "./3.doublelinklist.h"
int main(int argc, const char *argv[])
{
    doublelinklist* head = creatr_doublelinklist();

    insertHead_doublelinklist(head,999);
    insertHead_doublelinklist(head,888);
    insertHead_doublelinklist(head,777);
    insertHead_doublelinklist(head,666);
    insertHead_doublelinklist(head,555);
    insertHead_doublelinklist(head,444);
    showdoublelinklist(head);

    insertEnd_doublelinklist(head,123);
    insertEnd_doublelinklist(head,456);
    insertEnd_doublelinklist(head,789);
    showdoublelinklist(head);

    delHead_doublelinklist(head);
    showdoublelinklist(head);

    delEnd_doublelinklist(head);
    showdoublelinklist(head);

    insertByindex_doublelinklist(head,3,111);
    insertByindex_doublelinklist(head,20,99);
    showdoublelinklist(head);
                                                                                 
    delByindex_doublelinklist(head,2);
    delByindex_doublelinklist(head,20);
    showdoublelinklist(head);
    return 0;
}
                                                                                 

二、功能函数

#include <stdio.h>
#include <stdlib.h>
#include "./3.doublelinklist.h"
doublelinklist* creatr_doublelinklist()
{
    doublelinklist*head = (doublelinklist*)malloc(sizeof(doublelinklist));
    if(NULL == head)
    {
        printf("结点创建失败,双向链表申请失败\n");
        return NULL;
    }
    head->next = NULL;
    head->prev = NULL;
    head->text.len=0;

    return head;
}

//判空
int isEmpty_doublelinklist(doublelinklist*head)
{
    return head->next == NULL?1:0;
}

//遍历
void showdoublelinklist(doublelinklist*head)
{                                                                                                
    doublelinklist*p = head;
    while(p->next != NULL )
    {
        p=p->next;
        printf("%d ",p->text.data);
    }
    printf("\n");
    return ;
}

//头插法
void insertHead_doublelinklist(doublelinklist*head,dataType num)
{
    doublelinklist* temp = (doublelinklist*)malloc(sizeof(doublelinklist));
    if(NULL == temp)                                                                                             
    {
        printf("结点创建失败,头插失败\n");
        return ;
    }
    temp->text.data = num;
    temp->next = NULL;
    temp->prev = NULL;

    if(isEmpty_doublelinklist(head) == 1)
    {
        temp->next = head->next;
        head->next= temp;

        temp->prev = head;

        return ;
    }
    else
    {
        temp->next = head->next;
        head->next = temp;

        temp->next->prev = temp;
        temp->prev = head;
    }
    head->text.len++;
    return ;
}

//尾插法
void insertEnd_doublelinklist(doublelinklist*head,dataType num)
{
    doublelinklist* temp = (doublelinklist*)malloc(sizeof(doublelinklist));
    if(NULL == temp)
    {
        printf("结点创建失败,尾插失败\n");
        return ;
    }
    temp->text.data = num;
    temp->next = NULL;                                                                        
    temp->prev = NULL;

    doublelinklist* p =head;
    while(p->next != NULL)
    {
        p=p->next;
    }
    temp->next = p->next;
    p->next = temp;
    temp->prev = p;

    head->text.len++;
    return ;

}

 //头删法
 void delHead_doublelinklist(doublelinklist*head)
 {
     if(isEmpty_doublelinklist(head))
     {
         printf("双向链表为空,头删失败\n");
         return;
     }
     doublelinklist* temp = head->next;
     if(NULL == temp->next)
     {
         head->next= NULL;
     }
     else
     {
     head->next=temp->next;
     temp->next->prev=head;
     }
     free(temp);
     head->text.len--;
     return;
 }
 
 //尾删法
 void delEnd_doublelinklist(doublelinklist*head)
 {
     if(isEmpty_doublelinklist(head))
     {
         printf("双向链表为空,尾删失败\n");
         return;
     }
     doublelinklist*temp;
     doublelinklist*p=head;
     while(p->next->next != NULL)
     {
         p=p->next;
     }
     temp=p->next;
     p->next=NULL;
     free(temp);
     head->text.len--;
     return;
 }
 
//按位置插入
void insertByindex_doublelinklist(doublelinklist*head,int index,dataType num)
{
    doublelinklist* temp = (doublelinklist*)malloc(sizeof(doublelinklist));
    if(NULL == temp)
    {
        printf("结点创建失败,插入失败\n");
        return ;
    }
    temp->text.data = num;
    temp->next = NULL;
    temp->prev = NULL;

    if(index<1 || index >head->text.len+1)
    {
        printf("插入位置非法\n");
        return ;
    }                                                                                                    
    doublelinklist* p=head;
    int i;
    for(i=1;i<index;i++)
    {
        p=p->next;
    }
    if(p->next != NULL)
    {
        temp->next = p->next;
        p->next = temp;

        temp->next->prev = temp;
        temp->prev = p;
    }
    else
    {
        temp->next = NULL;
        p->next = temp;
        temp->prev = p;
    }
    head->text.len++;
    return ;
}

//按位置删除
void delByindex_doublelinklist(doublelinklist*head,int index)
{
    if(isEmpty_doublelinklist(head))
    {
        printf("双向链表为空,删除失败\n");
        return;
    }

    if(index<1 || index >head->text.len+1)
    {
        printf("选择位置非法\n");
        return ;
    }

    doublelinklist*p=head;
    for(int i=1;i<index;i++)
    {
        p=p->next;
    }
    doublelinklist*temp = p->next;
    p->next = p->next->next;
    temp->next->prev = p;
    free(temp);
    head->text.len--;
    return;

}

三、头文件

#ifndef __doublelink_H__                                   
#define __doublelink_H__

typedef int dataType;

union msg{
    dataType data;
    int len;
};

typedef struct node{
    union msg text;
    struct node* next;
    struct node* prev;
}doublelinklist;

doublelinklist* creatr_doublelinklist();
void showdoublelinklist(doublelinklist*head);
void insertHead_doublelinklist(doublelinklist*head,dataType num);
void insertEnd_doublelinklist(doublelinklist*head,dataType num);
void insertByindex_doublelinklist(doublelinklist*head,int index,dataType num);
void delHead_doublelinklist(doublelinklist*head);
void delEnd_doublelinklist(doublelinklist*head);
void delByindex_doublelinklist(doublelinklist*head,int index);


#endif                                                                                           
                                                                                                 
                                                                                                 
                                                                                                 
                                                                                                 

四、运行结果

相关推荐

  1. 数据结构---双向

    2024-02-22 09:10:05       41 阅读
  2. 数据结构——双向

    2024-02-22 09:10:05       21 阅读
  3. 数据结构--双向

    2024-02-22 09:10:05       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-22 09:10:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-22 09:10:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-22 09:10:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-22 09:10:05       20 阅读

热门阅读

  1. 数据结构:结构体定义方式

    2024-02-22 09:10:05       26 阅读
  2. 数据结构day2

    2024-02-22 09:10:05       25 阅读
  3. 机器学习科普及学习路线

    2024-02-22 09:10:05       29 阅读
  4. 协程和线程

    2024-02-22 09:10:05       27 阅读
  5. 【Delphi 基础知识 31】Timer控件的详细使用

    2024-02-22 09:10:05       25 阅读
  6. MATLAB R2024a 主要更新内容

    2024-02-22 09:10:05       31 阅读
  7. 开源大数据管理平台

    2024-02-22 09:10:05       30 阅读