链表学习
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);//打印 }
结果图: