链表
一、链表的逻辑,存储结构
链表由链表头节点及其他节点构成。其中每一个节点都有其对应的数据和指向下一元素的指针。
二、链表的代码实现
三、实现简单的链表
三、链表的操作
一、添加节点至链表头部
实现思路:
1.将数据写入一个新建的节点
2.将表头指向的地址(即首个节点的地址)写入新建的节点
3.将表头指向的地址改为新建的节点
代码:
#include<iostream>
using namespace std;
struct Node{
int data;//数据
struct Node* next;//指向下一数据元素的指针
};
struct Node* head;//链表头
void Insert(int _data){
Node* temp = new Node();
temp->data = _data;//写入数据
temp->next = head;//写入首位节点指针,使节点联结原首各节点。
head = temp;//使链表头指向该节点
}
void Print(){
Node* temp = head;
cout<<"List is:";
while(temp!=NULL){
cout<<" "<<temp->data;//输出当前节点的数据
temp = temp->next;//使该临时节点指向下一节点
}
cout<<endl;
}
int main (){
head = NULL; //设置链表头为空指针
Insert(1);//在首位插入节点
Insert(2);
Insert(3);
Insert(4);
Print();
//DONE
}
运行结果:
二、任意位置插入节点
实现思路:
1.将数据写入一个新建的节点
2.如果不是插入到首位,则取出要插入位置的前一位的节点中保存的下一节点地址,赋给新建节点,使得新建节点与下一节点联结。如果插入到第一位,那么将节点指向的地址指向表头,然后将表头指向该节点。
3.将前一位节点的下一节点地址修改为新建节点的地址,使得新建节点与前一节点形成联结。
代码:
#include<iostream>
using namespace std;
struct Node{
int data;//数据
struct Node* next;//指向下一数据元素的指针
};
struct Node* head;//链表头
void Insert(int pos,int _data){
Node* temp = new Node();
temp->data = _data;//写入数据
temp->next = NULL;
if(pos == 1){
//插入到首位的情况
temp->next = head;
head = temp;
}else{
//插入到非首位的情况
Node* temp2 = head;
for(int i =0;i<pos-2;i++){
//循环到插入位前一位
temp2 = temp2->next;
}
if(temp2 == NULL) exit(0);//插入位置非法
temp->next = temp2->next;//将插入节点指向的地址修改为下一节点(即插入位置前一节点保存的地址)
temp2->next = temp;//将前一位节点指向的地址改为该节点的地址。
}
}
void Print(