链表学习
1.链表的创建:
创建一个 头结点 并返回 空的节点
Linked* Create()
{
Linked* head = (Linked*)malloc(sizeof(Linked));
head -> next = NULL;
return head;
}
2.链表的删除:
删除标志节点后的下一个节点
void DeleteAfter(Linked* node)
{
Linked* nextnode=node->next;
node -> next = nextnode -> next;
free(nextnode);//释放删除节点的内存
}
3.查找节点
查找链表中索引为 index 的元素,注意当 index 为 0 的时候返回的是头节点的下一个节点;
Linked* GetByIndex(Linked *head,int index)
{
head=head->next;
if(index==0)
{
return head;
}
else
{
while(index--)
{
head=head->next;
}
return head;//查找索引节点
}
}
4.插入节点
在指定节点后面插入一个新节点,并赋值;
void InsertAfter(Linked* node,int num,float sc)
{
Linked* newNode = (Linked*)malloc(sizeof(Linked));
newNode->key=num;
newNode->num=sc;
newNode->next=node->next;
node->next=newNode;
}
5.遍历节点
逐个遍历:
void PrintAll(Linked* head)
{
Linked* p=head->next;
while(p)//当 p = NULL 的时候结束
{
cout << p->key<<" "<<p->num<<endl;
p=p->next;
}
}
主程序:
#include <iostream>
using namespace std;
struct Linked
{
/********* Begin *********/
//结构体的成员变量
int key;
float num;
Linked* next;
/********* End *********/
};
Linked* Create()
{
/********* Begin *********/
//创建并返回一个新链表
Linked* head = (Linked*)malloc(sizeof(Linked));
head -> next = NULL;
return head;
/********* End *********/
}
void InsertAfter(Linked* node,int num,float sc)
{
/********* Begin *********/
//在指定节点后插入一个新节点,内容由 num,sc 参数指定
Linked* newNode = (Linked*)malloc(sizeof(Linked));
newNode->key=num;
newNode->num=sc;
newNode->next=node->next;
node->next=newNode;
/********* End *********/
}
void DeleteAfter(Linked* node)
{
/********* Begin *********/
//删除此节点之后的一个节点
Linked* nextnode=node->next;
node -> next = nextnode -> next;
free(nextnode);
/********* End *********/
}
Linked* GetByIndex(Linked *head,int index)
{
/********* Begin *********/
//返回指定索引处的节点
head=head->next;
if(index==0)
{
return head;
}
else
{
while(index--)
{
head=head->next;
}
return head;
}
/********* End *********/
}
void PrintAll(Linked* head)
{
Linked* p=head->next;
while(p)//当 p = NULL 的时候结束
{
cout << p->key<<" "<<p->num<<endl;
p=p->next;
}
}
int main()
{
int num;
float score;
cin >> num >> score ;
Linked* lk = Create();//创建头节点
InsertAfter(lk,num,score);//插入第一组数据
cin >> num >> score ;
InsertAfter(GetByIndex(lk,0),num,score);//找到第一个节点,在第一个节点后插入节点
cin >> num >> score ;
InsertAfter(GetByIndex(lk,1),num,score);//找到第二个节点,在第一个节点后插入节点
DeleteAfter(GetByIndex(lk,0));//删除第二个节点
PrintAll(lk);//打印
}
结果图: