链接: 王道2021数据结构链接
提取码:rpy8
–来自百度网盘超级会员V4的分享`
typedef int ElemType;//元素的类型
typedef int ElemType;//元素的类型
typedef struct LNode
{
ElemType data;
LNode* next;
}LNode,*LinkList;
/*--------------------------------*/
//初始化单链表
void InitList(LinkList &L){
//让L直接为空
L = NULL;
}
/*--------------------------------*/
//得到单链表长度
int Length(LinkList L){
//定义length为0
int length = 0;
//定义结点p指向L
p = L;
//先判断P是否为空
if(p == NULL){
//如果是那么length就为0
length = 0;
}
//循环一遍(直到P == NULL)
while(p != NULL){
//P = P->next;
p = p->next;
//length++
length++;
}
//返回
return length;
}
/*--------------------------------*/
//单链表判空
bool Empty(LinkList L){
//判断L是否等于NULL
return L;
}
/*--------------------------------*/
//头插法建立单链表
bool List_HeadInsert(LinkList &L){
//调用初始化方法
InitList(L);
//新建插入节点s
LNode * s;
//新建赋值的值e
int e;
//输入e的值
scanf("%d", &x);
//当e不为9999时
while(e != 9999){
//为s分配内存空间
s = (LNode *)malloc(sizeof(LNode));
//为其赋值
s->data = e;
//让s->next指向L->next
s->next = L->next;
//让L->next指向s
L->next = s;
//输入e的值
scanf("%d", &x);
}
//返回
return true;
}
//尾插法建立单链表
bool List_TailInsert(LinkList &L){
//调用初始化方法
InitList(L);
//新建插入节点s和表尾指针r(将L的值赋值给r)
LNode *s, *r = L;
//新建赋值e
int e;
//输入赋值的e
scanf("%d", &x);
//当e不为9999时
while(e != 9999){
//为s分配内存空间
s = (LNode *)malloc(sizeof(LNode));
//为s赋值
s->data = e;
//s->next指向r->next
s->next = r->next;
//r->next指向s
r->next = s;
//r指针移动到s的位置(继续成为表尾指针)
r = s;
//输入赋值的e
scanf("%d", &x);
}
//将s->next指向null
s->next = NULL;
//返回
return true;
}
/*--------------------------------*/
//在表中查找第一个与元素相同位置的节点
//(返回节点)
LNode* LocateElem_LNode(LinkList L, ElemType e){
//首先判断L是否合法
if(L == NULL) return false;
//新建节点p为遍历指针(初始化指向L)
LNode *p = L;
//j表示指向到了第几个节点
int j = 1;
//循环查找(p不为空,且p的数据域不等于e)
while(p != NULL && p->data != e){
p = p->next;
j++;
}
//返回指针p
return p;
}
//(返回位置,同上,只不过返回值不一样而已)
/*--------------------------------*/
//按位查找节点
//获得某一位置元素的值
ElemType GetElem(LinkList L, int i)
{
//判断L是否合法
//判断i是否合法
if(L == NULL || i < 1) return false;
//指针p为遍历指针指向L
LNode *p = L;
//j为记录p指向到了第几个节点
int j = 1;
//while循环就行
while (p != NULL && j < i){//j<i要循环i-j次 j<=i要循环i-j+1次
p = p->next;
j++;
}
//返回
return p;
}
/*--------------------------------*/