• 单链表


    定义一个单链表结构

    typedef struct LNode
    {
        Elemtype data;
        struct LNode *next;
    }*Linklist;

     初始化链表(尾插法)

    void CreatList(Linklist &L)
    {
        Linklist p, h;
        cout << "请输入链表的长度" << endl;
        int n;
        cin >> n;
        L = (Linklist)malloc(sizeof(LNode));
        L->next = NULL;
        h = L;
        if (!L)
        {
            cout << "申请空间失败" << endl;
        }
        cout << "请输入新节点的数值" << endl;
        while (n != 0)
        {
            p = (Linklist)malloc(sizeof(LNode));
            cin >> p->data;
            p->next = h->next;
            h->next = p;
            h = h->next;
            n--;
        }
    }

     按位置查找

    void GetElem(Linklist &L)
    {
        cout << "请输入要查找的位置" << endl;
        int e;
        cin >> e;
        Linklist p = L;
        while (p->next != NULL && e != 0)
        {
            p = p->next;
            e--;
        }
        if (e != 0)
        {
            cout << "您所查找的位置不在本链表中" << endl;
        }
        else
        {
            cout << "您所查找的元素为:" << p->data << endl;
        }
    }

    插入一个元素

    void InsertElem(Linklist &L)
    {
        Elemtype data;
        int e;
        cout << "请输入插入的元素值和位置(以空格隔开)" << endl;
        cin >> data;
        cin >> e;
        Linklist s, p = L;
        s = (Linklist)malloc(sizeof(LNode));
        s->data = data;
        while (p->next != NULL && e != 1)
        {
            p = p->next;;
            e--;
        }
        if (e > 1)
        {
            cout << "您输入的位置超过本表的长度啦!" << endl;
        }
        s->next = p->next;
        p->next = s;
    }

    删除一个元素

    void DeleteElem(Linklist &L)
    {
        int e;
        Linklist p = L,q = NULL;
        cout << "请输入删除元素位置" << endl;
        cin >> e;
        while (p->next != NULL && e != 1)
        {
            p = p->next;
            e--;
        }
        if (e > 1)
        {
            cout << "您输入的位置超过本表的长度啦!" << endl;
        }
        else
        {
            q = p->next;
            p->next = q->next;
            free(q);
        }
    }

    遍历一遍链表

    void ShowList(Linklist &L)
    {
        cout << "遍历一遍链表" << endl;
        Linklist l = L;
        while (l->next != NULL)
        {
            l = l->next;
            cout << l->data << ' ';
        }
        cout << endl;
    }

    完整代码

    #include"stdafx.h"
    #include <iostream>
    #include<stdlib.h>
    using namespace std;
    typedef int Elemtype;
    //定义一个单链表结构 
    typedef struct LNode
    {
        Elemtype data;
        struct LNode *next;
    }*Linklist;
    //初始化链表
    void CreatList(Linklist &L)
    {
        Linklist p, h;
        cout << "请输入链表的长度" << endl;
        int n;
        cin >> n;
        L = (Linklist)malloc(sizeof(LNode));
        L->next = NULL;
        h = L;
        if (!L)
        {
            cout << "申请空间失败" << endl;
        }
        cout << "请输入新节点的数值" << endl;
        while (n != 0)
        {
            p = (Linklist)malloc(sizeof(LNode));
            cin >> p->data;
            p->next = h->next;
            h->next = p;
            h = h->next;
            n--;
        }
    }
    //按位置查找
    void GetElem(Linklist &L)
    {
        cout << "请输入要查找的位置" << endl;
        int e;
        cin >> e;
        Linklist p = L;
        while (p->next != NULL && e != 0)
        {
            p = p->next;
            e--;
        }
        if (e != 0)
        {
            cout << "您所查找的位置不在本链表中" << endl;
        }
        else
        {
            cout << "您所查找的元素为:" << p->data << endl;
        }
    }
    //插入一个元素
    void InsertElem(Linklist &L)
    {
        Elemtype data;
        int e;
        cout << "请输入插入的元素值和位置(以空格隔开)" << endl;
        cin >> data;
        cin >> e;
        Linklist s, p = L;
        s = (Linklist)malloc(sizeof(LNode));
        s->data = data;
        while (p->next != NULL && e != 1)
        {
            p = p->next;;
            e--;
        }
        if (e > 1)
        {
            cout << "您输入的位置超过本表的长度啦!" << endl;
        }
        s->next = p->next;
        p->next = s;
    }
    //删除一个元素
    void DeleteElem(Linklist &L)
    {
        int e;
        Linklist p = L,q = NULL;
        cout << "请输入删除元素位置" << endl;
        cin >> e;
        while (p->next != NULL && e != 1)
        {
            p = p->next;
            e--;
        }
        if (e > 1)
        {
            cout << "您输入的位置超过本表的长度啦!" << endl;
        }
        else
        {
            q = p->next;
            p->next = q->next;
            free(q);
        }
    }
    //遍历一遍链表
    void ShowList(Linklist &L)
    {
        cout << "遍历一遍链表" << endl;
        Linklist l = L;
        while (l->next != NULL)
        {
            l = l->next;
            cout << l->data << ' ';
        }
        cout << endl;
    }

     觉得文章不错,点个赞和关注哟.

  • 相关阅读:
    核心编程(第七章)
    核心编程答案(第六章)
    spring aop配置切点执行了两次的原因
    spring AOP使用 xml配置
    有关于时间戳的pgsql操作
    sql 中 limit 与 limit,offset连用
    学习大数据笔记day1
    Java实现各种排序
    关于java洗牌发牌小程序
    flex.css
  • 原文地址:https://www.cnblogs.com/Lazy-Cat/p/9835431.html
Copyright © 2020-2023  润新知