目录
一、介绍
单链表就像一串珍珠项链,每颗珍珠是节点,线就是指针。从头摸到尾,灵活好加珠,但找珠得从头摸,效率有点拖。简单又实用,就是单链表啦!
摘自百度百科:
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
二、基本操作
1.创建一个单链表
#pragma once
#ifndef __DEFINE_H
#define __DEFINE_H
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
#endif
#include<stdio.h>
#include<stdlib.h>
typedef struct ElemType
{
char num[8];
char name[8];
int score;
}ElemType;
typedef struct LNode//声明结点的类型和指向结点的指针类型
{
ElemType data;//结点的数据域
struct LNode* next;//结点的指针域
}LNode, * LinkList;//LinkList为指向结构体Lnode的指针类型
每个结点中都有一个LNode结构体,LNode中包含着数据域(data)和指针域(next)。data又是一个结构体,里面存放着num,name和score。指针域存放着指向下一节点的地址。
2.链表初始化
对头节点初始化,头节点中只存放下一个结点的地址,不存放数据。
//链表初始化
Status linList_L(LinkList& L)
{
L = new LNode;
L->next = NULL;
return OK;
}
3.判断首结点是否为空
//判断首结点是否为空
Status ListEmpty(LinkList L)
{
if (L->next)
{
return 0;
}
else
return 1;
}
4.销毁单链表
创建指针P用来存放链表L中每个结点的地址的地址,经过while循环,让P依次取到链表L中结点的地址,然后进行销毁。
//销毁单链表
Status DestroyList_L(LinkList& L)
{
LNode* p;
while (L)
{
p = L;
L = L->next;
delete p;
}
return OK;
}
5.清空单链表
//清空单链表
Status ClearList (LinkList& L)
{
LNode* p,*q;
p = L->next;
while (p)
{
q = p->next;
delete p;
p = q;
}
L->next = NULL;
return OK;
}
6.求链表的表长
//求链表的表长
int ListLength_L(LinkList L)
{
LinkList p;
p = L->next;
int i = 0;
while (p)
{
i++;
p = p->next;
}
return i;
}
7.按位置查找元素
//按位置查找元素
Status GetElem_L(LinkList L, int i, ElemType& e)//获取线性表L中的某个数据元素的内容,通过变量e返回
{
LNode *p = L->next;//初始化
int j = 1;
while (p && j < i)//向后扫描,直到p指向第i个元素或p为空
{
p = p->next;
++j;
}
if (!p || j > i)//第i个元素不存在
return ERROR;//取第i个元素
e = p->data;
return OK;
}
8.按值查找元素
//按值查找元素
LNode* Get(LinkList L, ElemType x)
{
LNode* p = L->next;
int j = 1;
while (p&& p->data.name != x.name && p->data.num != x.num && p->data.score != x.score)
{
p = p->next;
++j;
}
return p;
}
int main()
{
LNode L;
return 0;
}
有关单链表的知识就分享到这,想了解跟多相关知识,请等待我后续的文章。
看到这里,不妨点个攒,关注一下吧!
最后,谢谢你的观看