博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
双向循环链表
阅读量:6621 次
发布时间:2019-06-25

本文共 3870 字,大约阅读时间需要 12 分钟。

定义一个循环链表结构

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

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

 

转载于:https://www.cnblogs.com/Lazy-Cat/p/9835862.html

你可能感兴趣的文章
陀螺仪原理--网上转载
查看>>
转:OpenResty最佳实践(推荐了解lua语法)
查看>>
转:CEO, CFO, CIO, CTO, CSO是什么
查看>>
P2P之UDP穿透NAT的原理与实现 - 增强篇(附修改过的源代码)
查看>>
添加 All Exceptions 断点后, 每次运行都会在 main.m 中断的一种解决方法
查看>>
[Ubuntu] fg、bg让你的进程在前后台之间切换
查看>>
二维数组与类的定义_DAY06
查看>>
ROC曲线(receiver-operating-characteristic curve)-阈值评价标准(转)
查看>>
Swift 表达式
查看>>
FFmpeg(8)-打开音视频解码器,配置解码器上下文(avcodec_find_decoder()、avcodec_alloc_context3())...
查看>>
Javascript基础恶补
查看>>
andriod自定义视图
查看>>
linux下vim更改注释颜色
查看>>
在SSL / https下托管SignalR
查看>>
Using JRuby with Maven
查看>>
poj 3308 (最大流)
查看>>
Netty了解与小试
查看>>
醒醒吧少年,只用Cucumber不能帮助你BDD
查看>>
众安质量学堂文章汇总
查看>>
AsyncHttpSupport并发发送请求
查看>>