• 线性链表


    /**线性表的链式表示,创建,插入元素,删除元素,遍历,获得元素等操作。*/

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    #include<cctype>
    #include<queue>
    #include<vector>
    #include<algorithm>
    #define N 1001000
    #define INf 0X3f3f3f3f
    using namespace std;
    typedef long long LL;
    #define MAXSIZE 100
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -2
    #define TRUE 1
    #define FALSE 0
    typedef int ElemType;
    typedef int Status;
    
    typedef struct node
    {
        ElemType data;
        struct node *next;
    } LNode, *LinkList;
    int m=sizeof(LNode);
    
    Status GetElem_L(LinkList L, int i, ElemType &e)
    {
        LinkList p=L->next;
        int j=1;
        while(j<i&&p)
        {
            p=p->next;
            j++;
        }
        if(!p)
            return ERROR;
        e=p->data;
        return OK;
    }
    
    void TravelList_L(LinkList L)
    {
        LinkList p=L->next;
    
        while(p)
        {
            printf("%d ", p->data);
            p=p->next;
        }
    }
    
    void CreateList_L(LinkList &L, int n)
    {
        L=(LinkList)malloc(m);
        L->next=NULL;
        for(int i=0; i<n; i++)
        {
            LinkList p=(LinkList)malloc(m);
            scanf("%d", &(p->data));
            p->next=L->next;
            L->next=p;
        }
    }
    
    Status InsertList_L(LinkList &L, int i, ElemType e)
    {
        printf("请按所给思路实现单链表插入运算!
    ");
        LinkList s, p=L;
        int j=0;
    
        while(!p&&j!=i-1)
        {
            p=p->next;
            j++;
        }
    
        if(!p || i<1)
            return ERROR;
    
        s=(LinkList)malloc(m);
        s->data=e;
        s->next=p->next;
        p->next=s;
    
        return OK;
    }
    
    Status DeleteList_L(LinkList &L, int i, int &e)
    {
        printf("请按所给思路实现单链表删除运算!
    ");
        LinkList p=L, q;
        int j=0;
    
        while(p&&j!=i-1)
        {
            p=p->next;
            j++;
        }
        if(!p || i<1)
            return ERROR;
        q=p->next;
        e=q->data;
        p->next=q->next;
        free(q);
        return OK;
    }
    
    int main()
    {
        LinkList L1;
        int n;
        ElemType x;
        printf("请输一个整数:");
        scanf("%d", &n);
        printf("
    尾插法建单链表,请输入%d个整数:
    ", n);
        CreateList_L(L1, n);
        printf("尾插法建单链表成功!,单链表中的数据是:
    ");
        TravelList_L(L1);
        printf("
    ");
        printf("在第一个结点位置插入元素15:
    ");
        InsertList_L(L1, 1, 15);
        printf("插入后,链表中数据为:
    ");
        TravelList_L(L1);
        printf("
    ");
    
        if(DeleteList_L(L1, 3, x))
        {
            printf("
    删除第三个元素成功!被删除元素是:%d
    删除后单链表中数据是
    ", x);
            TravelList_L(L1);
            printf("
    ");
        }
        else
            printf("
    删除元素失败
    ");
        return 0;
    }
    View Code

    /**修改后的版本 */

    #include<cstdio>
    #include<cstdlib>
    typedef char ElemType;
    typedef int Status;
    
    typedef struct node
    {
        ElemType data;
        struct node *next;
    } LNode, *LinkList;
    
    void CreatList_L(LinkList L, int n)
    {
        LinkList rear, p;
        rear=L;
    
        for(int i=0; i<n; i++)
        {
            p=(LinkList)malloc(sizeof(LNode));
            scanf(" %c", &(p->data));
            rear->next=p;
            rear=p;
        }
        rear->next=NULL;
    }
    
    void InsertList_L(LinkList L, int i, int e)
    {
        LinkList p, pre;
        pre=L;
        int j=0;
    
        while(pre && j<i-1)
        {
            pre=pre->next;
            j++;
        }
        if(!pre || i<1)
        {
            printf("i值错误
    ");
            return ;
        }
    
        p=(LinkList)malloc(sizeof(LNode));
        p->data=e;
        p->next=pre->next;
        pre->next=p;
    }
    
    void DeleteList_L(LinkList L, int i, char *e)
    {
        LinkList p, pre;
        int j=0;
        pre=L;
    
        while(pre && j<i-1)
        {
            pre=pre->next;
            j++;
        }
    
        if(!pre || i<1)
        {
            printf("i值错误
    ");
            return ;
        }
    
        p=pre->next;
        pre->next=p->next;
        *e=p->data;
        free(p);
    }
    
    void PrintList_L(LinkList L)
    {
        LinkList p=L->next;
    
        while(p)
        {
            printf("%c ", p->data);
            p=p->next;
        }
    }
    
    int main()
    {
        int n, index;
        ElemType e;
        printf("请要输入字母的数量:");
        scanf("%d", &n);
        printf("请输入%d个小写的英文字母:", n);
        LinkList L1;
        L1=(LinkList)malloc(sizeof(LNode));
        CreatList_L(L1, n);///创建操作
        printf("输出链表中的元素:");
        PrintList_L(L1);
        printf("
    输入插入元素的位置和该元素:");
        scanf("%d %c", &index, &e);
        InsertList_L(L1, index, e);///插入操作
        printf("输出链表中的元素:");
        PrintList_L(L1);
        printf("
    输入删除元素的位置:");
        scanf("%d", &index);
        DeleteList_L(L1, index, &e);///删除操作
        printf("输出链表中的元素:");
        PrintList_L(L1);
        return 0;
    }
    View Code
  • 相关阅读:
    智慧光伏能源-园区光伏发电能源管控可视化
    无人值守,智能变电站可视化管控系统
    数字孪生,开启三维智慧园区管理新篇章
    智慧城市大数据运营中心 IOC 之 Web GIS 地图应用
    三维可视化数据中心机房监控管理系统
    打造绿色城市,数字孪生天然气站 3D 可视化
    绿色物流-智慧仓储监控管理 3D 可视化系统
    打造综合性智慧城市之朔州开发区 3D 可视化
    绿色城市之地下综合管廊3D可视化平台
    工业绿色环保发展:风力发电场管理监测可视化系统
  • 原文地址:https://www.cnblogs.com/9968jie/p/5889647.html
Copyright © 2020-2023  润新知