/*
自己看完视频敲得,测试完成后就在这里记录一下下下下下下
*/
#include<iostream>
using namespace std;
//带头结点
typedef struct LNode {
int data;
struct LNode* next;
}LNode,*LinkList;
//初始化
bool InitList(LinkList& L) {
L = new LNode;//分配一个头结点,并把指针返回给L
if (L == NULL)
return false;
L->next = NULL;
return true;
}
//求表长
int Linklength(LinkList L) {
int j = 0;
LNode* p = L->next;//第一个结点
while (p != NULL) {
j++;
p = p->next;
}
return j;
}
//判断空表
bool Empty(LinkList L) {
return (L == NULL);
}
//尾插法输入建立单链表
void List_TailInsert(LinkList& L) {
L = new LNode;//分配一个头结点,并把地址返回给L
LNode* r = L;//r指向尾结点
int n;//结点个数
cout << "请输入结点个数:" << endl;
cin >> n;
for (int i = 1; i <= n; i++) {
int e;
cout << "第" << i << "个结点数值:" << endl;
cin >> e;
LNode* s = new LNode;//分配结点,并将地址返回s
//也相当于给指针初始化
s->data = e;
r->next = s;
//s->next = NULL;
//和最后r->next一个效果,但是不能忘
r = s;
}
r->next = NULL;
}
//头插法输入建立单链表
void List_headInsert(LinkList& L) {
L = new LNode;//头结点
L->next = NULL;
//头插将头结点->next赋值给第一个结点,必须先指空
int n;//结点个数
cout << "结点个数n:" << endl;
cin >> n;
for (int i = 1; i <=n; i++) {
int e;
cout <<"第"<< i << "个结点数值:" << endl;
cin >> e;
LNode* s = new LNode;
s->data = e;
s->next = L->next;
L->next = s;
}
}
//输出单链表
void printList(LinkList L) {
LNode* p = L->next;//指向第一个结点
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
//按序号返回结点
LNode* GetElem(LinkList L, int i) {
LNode* p = L;//结点
int j = 0;//第一个结点
if (i == 0)
return p;
if (i < 1)
return NULL;
while (p != NULL && j < i) {
p = p->next;
j++;
}
return p;
}
//在结点p后面插入结点
void LNodeInsert_behind(LNode*p, int e) {
LNode* s = new LNode;//分配内存
s->data = e;
s->next = p->next;
p->next = s;
}
//在结点p前面插入结点,假如不传入头结点
void LNodeInsert_head(LNode* p,int e) {
LNode* s = new LNode;//分配
s->data = e;
s->next = p->next;
p->next = s;
int num = 0;
p->data = num; p->data = s->data; s->data = num;
}
//在第i个结点前面插入结点
void LinkInsert_head(LinkList& L, int i, int e) {
LNode* p = GetElem(L, i - 1);
LNodeInsert_behind(p, e);
}
//在第i个结点后面插入结点
void LinkInsert_behind(LinkList& L, int i, int e) {
LNode* p = GetElem(L, i);//返回第i个结点
LNodeInsert_behind(p, e);
}
int main() {
LinkList L;
//LinkList L 声明一个指向单链表第一个结点的指针
//声明一个指针,就会分配一块地址,不过指向是空的
List_headInsert(L);
printList(L);
LNode *p = GetElem(L, 3);
cout << p->data << endl;
LinkInsert_behind(L, 4, 99);
printList(L);
LinkInsert_head(L, 4, 100);
printList(L);
int len = Linklength(L);
cout << "len:" << len << endl;
return 0;
}
23王道——单链表
于 2022-03-14 16:10:43 首次发布