首页 > 其他分享 >[数据结构]单链表及其基本操作

[数据结构]单链表及其基本操作

时间:2023-03-20 15:06:36浏览次数:34  
标签:单链 return LNode int next LinkList 基本操作 数据结构 data


/*
* @Author:
* @data: 2019-12-02 14:49:03
* @Last Modified by:
* @Last Modified time: 2019-12-02 15:54:49
*/

#include <iostream>
#include <cstdio>

using namespace std;

typedef int Status;
typedef int Elem;

typedef struct LNode
{
/* data */
Elem data;
struct LNode *next; //想起 (数据结构是递归的 LNode 结点 由 data next 组成,而next本身是一种指向LNode 的指针 即LNode定义中调用了自身, 所以连表示一种递归的数据结构 这句台词在栈里 你说操蛋不操蛋
} LNode, *LinkList; //理解成 LNode头 *LinkList 除了头以外的? 大概

//初始化
Status InitList(LinkList &L)
{
L = new LNode; //申请一手内存 指向一片空空如也
L->next = NULL;
return 1;
}

//取值
Status GetElemList(LinkList &L, int i, Elem &e) //提一提这个e 很蛋疼 说老实话我不明白为什么要返回它出来看看你丢了啥
{
LNode *p = L->next; //你好 头节点
int j = 1;

while (p && j < i)
{
p = p->next; //常规遍历
++j;
}
if (!p || j > i)
return -1;
e = p->data;
return 1;
}

//插入
Status InsertList(LinkList &L, int i, Elem e)
{
LNode *p = L;
int j = 0;

while (p && j < i - 1)
{
p = p->next;
j++;
}
if (!p || j > i - 1)
return -1;

LNode *s = new LNode;
s->data = e;
s->next = p->next; //指向头节点指向的 看视频比较好理解
p->next = s; //头节点又指向这个新的

return 1;
}

//长度
Status LenList(LinkList &L, Elem &e)
{
LNode *p = L->next;
int j = 0;

while (p)
{
p = p->next;
++j;
}

if (p)
return -1;

e = j; //有一说一 遍历计数

return 1;
}

//删除
Status DelList(LinkList &L, int i)
{
LNode *p = L->next;
int j = 0;

while ((p->next) && (j < i - 1))
{
p = p->next;
++j;
}

if (!p->next || j > i - 1)
return -1;

LNode *q = p->next;
p->next = q->next;
delete q;//其实这里 q才是目标 因为之前循环都只到i-1 P直接指向下下个 删了Q Q太难了

return 1;
}

//排序
Status SortList(LinkList &L)
{
LNode *p = L->next;
LNode *TmpNode;
int tmp = 0;

while (p)
{
TmpNode = p;
while (TmpNode) //有一说一 我正常冒泡不知道为什么挂球了
{
if (p->data > TmpNode->data)
{
tmp = p->data;
p->data = TmpNode->data;
TmpNode->data = tmp;
}
TmpNode = TmpNode->next;
}
p = p->next;
}

return 1;
}

//遍历
Status ShowList(LinkList &L)
{
LNode *p = L->next;
while (p)
{
cout << p->data << " ";
p = p->next; //直接遍历
}

return 1;
}

//头插
Status CreatList_H(LinkList &L, int num)
{
L = new LNode;
L->next = NULL;

for (int i = 0; i < num; i++)
{
LNode *p = new LNode;
cin >> p->data;

p->next = L->next; //上面我写了
L->next = p;
}

return 1;
}

//尾插
Status CreatList_L(LinkList &L, int num)
{
L = new LNode;
L->next = NULL;
LNode *r = L;

for (int i = 0; i < num; i++)
{
LNode *p = new LNode;
cin >> p->data;

p->next = NULL;
r->next = p;
r = p;//重点就是这个啊 r指向了P 一直走下去
}

return 1;
}

int main()
{
LinkList L;

//1
InitList(L);
//1
int num;
cin >> num;
//CreatList_H(L, num);

//1
CreatList_L(L, num);
//1
//cout << InsertList(L, 1, 1);

//1
int e;
GetElemList(L, 1, e);
cout << "Elem 1 " << e << " ";

//1
int len;
LenList(L, len);
cout << "len:" << len << " ";

//1
int len2;
//DelList(L, 1);
//LenList(L, len2);
//cout << "AfterDellen " << len2<<" ";

//1
SortList(L);

//cout<<L->next->data;
//1
ShowList(L);
}


标签:单链,return,LNode,int,next,LinkList,基本操作,数据结构,data
From: https://blog.51cto.com/u_16014765/6132921

相关文章

  • [数据结构][队列]链表模拟队列操作
    #include<iostream>#include<cstdio>usingnamespacestd;#defineMAXSIZE100typedefintStatus;typedefintElem;typedefstructQNode{/*data*/Elemdata;stru......
  • [链表]用静态数组模拟单链表
    来源:模板题算法标签链表题目描述实现一个单链表,链表初始为空,支持三种操作:(1)向链表头插入一个数;(2)删除第k个插入的数后面的数;(3)在第k个插入的数后插入一个数现在要对......
  • [数据结构]有序表的合并
    /**@Author:*@Date:2019-12-0320:18:46*@LastModifiedby:*@LastModifiedtime:2019-12-0320:44:28*/#include<iostream>#include<cstdio>u......
  • 数据结构与算法:二叉树专题
    数据结构与算法:二叉树专题​​前言​​​​前提条件​​​​基础知识​​​​二叉树链式存储结构​​​​二叉树中序遍历​​​​二叉树层序遍历​​​​常见编程题​​​​......
  • redis 操作集合基本操作
    Redis的Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。集合对象的编码可以是intset或者hashtable。Redis中集合是通过哈......
  • 【C 数据结构】循环队列
    循环队列预先分配好数组空间#defineBUFFER_SIZE1024//在栈区分配空间intbuf[N];//在堆区分配空间int*buf;buf=(int*)malloc(BUFFER_SIZE*sizeof(int))......
  • 【VTK学习笔记】VTK基本数据结构_3.2数据对象和数据集
    任务:把几何结构和拓扑结构加入到数据集中1.无拓扑结构1#include<vtkSmartPointer.h>2#include<vtkPoints.h>//几何结构3#include<vtkPolyData.h>//数据集......
  • 数据结构-图
    1.图的概念基础概念顶点集合(vex-set):如上图S(vex)=边集合(arc-set):如上图S(arc)=度(degree):⽆向图中从⼀个点延伸出去的边数就是该点的度;有向图中包含出度和⼊......
  • [LeetCode] 数据结构入门
    数据结构入门217存在重复元素给你一个整数数组nums。如果任一值在数组中出现至少两次,返回true;如果数组中每个元素互不相同,返回false。解法1:两层循环第一层循......
  • Django笔记二之连接数据库、执行migrate数据结构更改操作
    本篇笔记目录索引如下:Django连接mysql,执行数据库表结构迁移步骤介绍操作数据库,对数据进行简单操作接下来几篇笔记都会介绍和数据库相关,包括数据库的连接、操作(包括增......