前言
第一次发布文章,没什么经验~
希望大家关注一下,点赞也行
一直会更新的~
链表与内容简介(可跳过)
链表是一种数据类型
它由指针串联节点而成,物理上节点不相邻
它可以快捷插入删除,是算法中重要的数据结构
这次我们先来掌握链表的建立
1.节点的定义
概念
一个节点包含两个部分: 数据域和指针域
数据域是节点的值,而指针域可以将多个节点进行空间上的串联,形成链表
节点由struct类型保存
代码实现
struct node{ //节点
int data;//数据域(可换类型)
struct node next//指针域
}
2.尾插法建立链表
思路
先建立一个仅有头结点的链表,其指针域为NULL
每次动态生成一个节点,插在头节点之后,以此类推
注:尾插法建立链表与输入顺序相同
代码实现
#include<bits/stdc++.h>
using namespace std;
struct node{
int data;//数据域
struct node *next;//指针域
};
int main(){
int n,num;
cin>>n;
struct node *temp,*head,*tail;//节点指针,头指针,尾指针
temp=(struct node*)malloc(sizeof(struct node));//申请空间
head=tail=temp;
for(int i=0;i<n;i++){
cin>>num;
temp=(struct node*)malloc(sizeof(struct node));//申请空间
//节点数据存储
temp->data=num;
temp->next=NULL;
//尾指针移动
tail->next=temp;
tail=temp;
}
temp=head->next;
while(temp!=NULL){//不为最后一个
cout<<temp->data<<" ";//输出
temp=temp->next;//指向下一个节点
}
return 0;
}
3.头插法建立链表
思路
先建立第一个节点为头结点
动态生成第二个节点在第一个节点后
最后将尾节点的指针域赋为NULL
代码实现
#include<bits/stdc++.h>
using namespace std;
struct node{
int data;//数据域
struct node *next;//指针域
};
int main(){
int n,num;
cin>>n;
struct node *head,*temp;//定义头指针,节点指针
temp=(struct node*)malloc(sizeof(struct node));//申请空间
temp->next=NULL;
head=temp;
for(int i=0;i<n;i++){
cin>>num;
temp=(struct node*)malloc(sizeof(struct node));//申请空间
//动态生成并存储节点
temp->data=num;
temp->next=head->next;
head->next=temp;
}
temp=head->next;
while(temp!=NULL){
cout<<temp->data<<" ";//输出
temp=temp->next;//指向下一个节点
}
return 0;
}
下次介绍链表的基本操作与复杂建立
end