ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构考研复习(双链表)

2021-08-01 21:01:00  阅读:236  来源: 互联网

标签:temp int 考研 next DLinkList 双链 数据结构 DNode previous


相较于单链表而言双链表更易于访问前驱结点,其余内容相差并不是很大,我在写这部分内容时基本上也还是套用之前写单链表的代码:

https://www.cnblogs.com/hortz/p/15085147.html

双链表的基本代码如下:

#include<stdio.h>
#include<malloc.h>

typedef struct DNode{
    int data;
    struct DNode *prior, *next;
}DNode, *DLinkList;

/* -1- 建立双链表(单链表的尾插法)*/
DLinkList Insert_List(DLinkList &D){
    int x;
    D = (DLinkList)malloc(sizeof(DNode));
    DNode *temp,*t = D;//t为表尾指针
    D->prior = NULL;
    D->next = NULL;
    while(x != 9999){
        scanf("%d",&x);
        temp = (DNode*)malloc(sizeof(DNode));
        temp->data = x;
        t->next = temp;
        temp->prior = t;//可省略
        t = temp;
    }
    return D;
}

/* -2- 获取元素*/
int Get_Element(DLinkList &D){
    DNode *temp = D->next;
    while(temp && temp->data!=9999){
        printf("%d  ",temp->data);
        temp = temp->next;
    }
    printf("\n");
}


/* -3- 插入结点*/
DLinkList Insert_Element(DLinkList &D,int i,int e){
    DNode *previous = D;
    int m =0;
    while(previous && m < i){
        previous= previous->next;
        m++;
    }
    DNode *temp = (DLinkList)malloc(sizeof(DNode));
    temp->data = e;

    temp->next = previous->next;//1
    previous->next->prior = temp;//2
    temp->prior = previous;//3
    previous->next = temp;//4
    //只要逻辑无误可以对上述语句进行删减或者交换顺序

    return D;
}


/* -4- 删除结点*/
DLinkList Delete_Element(DLinkList &D,int i){
    DNode *previous = D;
    int m = 0;
    while(previous && m < (i-1)){
        previous= previous->next;
        m++;
    }
    DNode *del_element = previous->next;
    previous->next = del_element->next;
    del_element->next->prior = previous;
    free(del_element);//释放结点空间
}




int main(){
    DLinkList D;

    printf("请依次输入数据:\n");
    printf("===================\n");
    Insert_List(D);
    Get_Element(D);
    int flag;
    printf("请进行选择:\n");
    printf("==1.在指定序列后插入元素==\n");
    printf("==2.双链表删除元素==\n");
    scanf("%d",&flag);
    switch(flag){
    case(1):
        {
            printf("请输入要插入元素的序列:\n");
            int m;
            scanf("%d",&m);
            printf("请输入要插入的元素值:\n");
            int e;
            scanf("%d",&e);
            Insert_Element(D,m,e);
            Get_Element(D);
            break;
        }
    case(2):
        {
            printf("请输入要删除的元素序列:\n");
            int m;
            scanf("%d",&m);
            Delete_Element(D,m);
            Get_Element(D);
            break;
        }

    }

    return 0;

}

 

 

 

标签:temp,int,考研,next,DLinkList,双链,数据结构,DNode,previous
来源: https://www.cnblogs.com/hortz/p/15087635.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有