??1.LinkList 强调这是一个单链表。
??2.LNode* 强调这是一个结点。
typedef struct LNode {
int data;//数据与
struct LNode* next;//指针域
}LNode,*LinkList;
/*
LinkList 强调这是一个单链表
LNode* 强调这是一个结点
*/
左边数据域,右边指针域!!!
bool InitList(LinkList& L)
{
L = (LNode*)malloc(sizeof(LNode));//分配一个头结点
if (L == NULL)
return false;
L->next = NULL;
return true;
}
??解释说明:当我们进行尾插法时:例如插入数据顺序为1,2,3,4,5。那么在单链表中的存储数据也为1,2,3,4,5。
LinkList List_TailInsert(LinkList& L)
{
int e = 0;
LNode* s, * r = L; // r为表尾指针
cout << "输入你要插入的元素:";
cin >> e;
while (e != 9999) {
s = (LNode*)malloc(sizeof(LNode));
s->data = e;
r->next = s;
r = s;
cout << "输入你要插入的元素:";
cin >> e;
}
r->next = NULL;
return L;
}
??解释说明:当我们进行头插法时:例如插入数据顺序为1,2,3,4,5。那么在单链表中的存储数据为5,4,3,2,1。
??头插法适合链表的逆置。
LinkList List_HeadInsert(LinkList& L)
{
int e = 0;
LNode* s;
cout << "输入你要插入的元素:";
cin >> e;
while (e != 9999)
{
s = (LNode*)malloc(sizeof(LNode));
s->data = e;
s->next = L->next;
L->next = s;
cout << "输入你要插入的元素:";
cin >> e;
}
return L;
}
bool ListInsert(LinkList& L, int i, int e)
{
//判断i值的合理性
if (i < 1)
return false;
LNode* p;//指针p指向当前扫描到的结点
int j = 0;//当前p指向的第几个结点
p = L; //L指向头结点,头结点使第0个元素(不存元素)
while (p != NULL && j < i - 1)
{
//循环找到第i-1个结点
p=p->next;
j++;
}
if (p == NULL)
return false;
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
bool DeleteNode(LinkList& L, int i)
{
//判断i的值是否合理
if (i < 1)
return false;
LNode* p = L;//指针p指向当前扫描结点
int j = 0;
while (p != NULL && j < i-1)
{
//循环找到第i-1个结点
p = p->next;
j++;
}
if (p == NULL)
return false;
if (p->next == NULL)//在第i-1个结点之后无其他结点
return false;
LNode* q = p->next; //令q指向被删除结点
p->next = q->next; //将q结点从链表中断开
free(q);
return true;
}
bool ChangeList(LinkList& L, int i)
{
int e = 0;
cout << "输入你要改变的值:";
cin >> e;
if (i < 1)
return false;
LNode* p = L;
int j = 0;
while (p != NULL && j < i)
{
p = p->next;
j++;
}
p->data = e;
return true;
}
void PrintList(LinkList L)
{
while (L->next!= NULL)
{
cout << L->next->data << " ";
L=L->next;
}
}
??主函数中的函数调用可以根据自己需求进行相应的调整。
int main()
{
LinkList L;
//初始化
InitList(L);
//给链表输入元素(尾插法)
List_TailInsert(L);
给链表输入元素(头插法)
//List_HeadInsert(L);
// 插入一个元素
int i = 0,e = 0;
cout << "输入你要插入的位置:";
cin >> i;
cout << "输入你要插入的元素:";
cin >> e;
ListInsert(L, i, e);
//删除一个元素
cout << "输入你要删除的位置:";
cin >> i;
DeleteNode(L,i);
//改变第i个位置的元素值
cout << "输入你要改变的位置:";
cin >> i;
ChangeList(L, i);
//打印全部元素
PrintList(L);
return 0;
}
对你有帮助,点一个关注哟!!!