zoukankan      html  css  js  c++  java
  • 单链表

    定义一个单链表结构

    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;
    }

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

  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/Lazy-Cat/p/9835431.html
Copyright © 2011-2022 走看看