zoukankan      html  css  js  c++  java
  • 双向循环链表

    定义一个循环链表结构

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

    初始化链表

    void CreatList(Linklist &L)
    {
        Linklist p, h;
        cout << "请输入链表的长度" << endl;
        int n;
        cin >> n;
        L = (Linklist)malloc(sizeof(LNode));
        L->next = L;
        L->prev = L->next;
        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;
            p->prev = h;
            h = h->next;
            n--;
        }
        L->prev = h;
    }

    按位置查找

    void GetElem(Linklist &L)
    {
        cout << "请输入要查找的位置" << endl;
        int e;
        cin >> e;
        Linklist p = L;
        while (p->next != L && 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 != L && 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 != L && 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 != L)
        {
            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 *prev;
        struct LNode *next;
    }*Linklist;
    //初始化链表
    void CreatList(Linklist &L)
    {
        Linklist p, h;
        cout << "请输入链表的长度" << endl;
        int n;
        cin >> n;
        L = (Linklist)malloc(sizeof(LNode));
        L->next = L;
        L->prev = L->next;
        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;
            p->prev = h;
            h = h->next;
            n--;
        }
        L->prev = h;
    }
    //按位置查找
    void GetElem(Linklist &L)
    {
        cout << "请输入要查找的位置" << endl;
        int e;
        cin >> e;
        Linklist p = L;
        while (p->next != L && 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 != L && 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 != L && 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 != L)
        {
            l = l->next;
            cout << l->data << ' ';
        }
        cout << endl;
    }

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

  • 相关阅读:
    20190729
    [51Nod1623] 完美消除
    [WC2013] 糖果公园
    20190727
    在Java中调用带参数的存储过程
    Oracle 字符集的查看和修改
    查询oracle server端的字符集
    Mysql 数据库中文乱码问题
    错误:”未能加载文件或程序集“System.Web.Mvc, Version=2.0.0.0” 解决方法
    CSS背景图拉伸自适应尺寸,全浏览器兼容
  • 原文地址:https://www.cnblogs.com/Lazy-Cat/p/9835862.html
Copyright © 2011-2022 走看看