zoukankan      html  css  js  c++  java
  • 链表的创建,插入,删除,输出

    我用的是头插法

    #include<stdio.h>

    #include<malloc.h>

    #define TURE 1
    #define FLASE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    #define OVERFLOW -2

    typedef int Status;
    typedef int ElemType;

    typedef struct LNode
    {
        ElemType data;
        struct LNode *next;
    }LNode, *LinkList ;


    //创建链表
    void BuildList_L(LinkList &L, int n)
    {
        LinkList p;
        L = (LinkList)malloc(sizeof(LNode));
        L->next = NULL;
        printf("请输入元素值:");
        for (int i = 0 ; i < n; i++ )
        {
            p = (LinkList)malloc(sizeof(LNode));
            scanf_s("%d", &p->data); //输入元素值
            p->next = L->next;
            L->next = p; //插入到表头
        }
    }

    Status ListInsert_L(LinkList &L, int i, ElemType e)
    {
        //在i的带头节点的单链线性表L中的第i个位置之前插入元素e
        LinkList p;
        LinkList s;
        p = L;
        int j = 0;
        while (p && j < i - 1)  //寻找i-1个节点
        {
            p = p->next;
            ++j;
        }
        if (!p || j > i - 1)
            return ERROR;  //i小于1或者大于表长加1
        s = (LinkList)malloc(sizeof(LNode));  //生成新节点
        s->data = e;    //插入L中
        s->next = p->next;
        p->next = s;
        return OK;
    }

    //链表的删除
    Status ListDelete_L(LinkList &L, int i, ElemType &e)
    {
        //在带头结点的单链线性表L中。删除第i个元素的。并由e返回其值
        LinkList p;
        LinkList q;
        p = L;
        int j = 0;
        while (p->next && j < i - 1)
        {
            p = p->next;
            ++j;
        }
        if (!(p->next) || j > i - 1)
            return ERROR;    //删除节点不合理
        //删除并释放节点
        q = p->next;
        p->next = q->next;
        e = q->data;
        free(q);
        return OK;
    }
    void PrintfList(LinkList &L)
    {
        LinkList p ;
        p = L->next ;
        if (p == NULL)
            printf_s("该链表为空 ");
        else
        {
            
            while (p)
            {
                printf_s("%d ", p->data);
                p = p->next ;
            }
        
        }
    }

    void main()
    {
        LinkList l;
        int a = 0; //a为链表长度
        printf_s("请输入所要创建的链表元素的个数:");
        scanf_s("%d", &a);
        BuildList_L( l , a );
        printf_s("输出如今的链表:");
        PrintfList( l );
        printf_s(" ");
        int x = 0, y = 0;  //x代表所要插入元素的位置,y为所要插入元素的值
        printf_s("输入要 插入的元素的位置及元素的值:");
        scanf_s("%d%d", &x , &y );
        ListInsert_L( l , x , y );
        printf_s("输出如今的链表:");
        PrintfList( l );    
        printf_s(" ");
        int m = 0, n = 0;   //m代表所要删除元素的位置,n代表所要删除的元素的值
        printf_s("输入要删除的元素的位置及元素值:");
        scanf_s("%d%d", &m, &n);
        ListDelete_L( l , m , n );
        printf_s("输出如今的链表:");
        PrintfList( l );
        printf_s(" ");
    }
  • 相关阅读:
    好用的辅助工具
    摆脱单体架构黑洞>>>>走向微服务的乐园
    什么是 jQuery 事件
    WebDriver一些常见问题的解决方法【转】
    IE浏览器相关的问题及解决方案[转]
    fix org.openqa.selenium.NoSuchWindowException when find element on ie11.
    BI案例:BI在连锁零售业应用(ZT)【转】
    SQL 基础语法(创建表空间、用户、并授予权限、数据的增删改查) --(学习笔记)[转]
    创建数据库和表的SQL语句【转】
    T-sql语句中GO的作用及语法【转】
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6780149.html
Copyright © 2011-2022 走看看