zoukankan      html  css  js  c++  java
  • 线性链表

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

    #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
  • 相关阅读:
    eclipse快捷键 Eclipse快捷键 10个最有用的快捷键
    ssh之雇员管理系统(5)将struts+spring整合2
    ssh之雇员管理系统(4)改进的hibernate测试
    java中常常建包时,这些包具体是什么意思呢?+项目开发流程、实战
    ssh之雇员管理系统(1)spring测试
    JUnit4概述
    ssh之雇员管理系统(5)添加struts测试
    SQl查询数据库表名、表的列名
    关于人脉大PK的二三事 推荐的方法
    JavaScript有用的代码(ie,save)
  • 原文地址:https://www.cnblogs.com/9968jie/p/5889647.html
Copyright © 2011-2022 走看看