目录
1.创建结构体
我们单链表的节点分为两个部分 1.数据 2.指针如图
我们要定义一个结构体节点
//定义结构体
struct node
{
int data; //数据
struct node*next; //指针
};
2.创建节点
我们已经定义了 节点的结构体了 然后就要给节点里面存储 值
//创建节点
struct node*createnode(data)
{
struct node*newnode=(struct node*)malloc(sizeof(struct node));//开辟空间
newnode->data=data; //节点里面的数据等于 主函数传过来的数据
newnode->next=NULL; //指针为空
return newnode; //返回节点
}
3.插入
1. 头插法 把节点插入在头节点后边
//插入(头插法)
void hin(struct node*head,int data)
{
struct node*pnode=head; //定义一个结构体指针
struct node*newnode=createnode(data); //定义一个新节点 并用上面的方法给节点存储
newnode->next=pnode->next;//新节点指向头节点的下一个节点
pnode->next=newnode; //头节点指向新节点
}
--------------------------------------------------------------------------------------------------------------------------------
2. 尾插法 把所有节点插入在链表的最后
单链表 尾插
//尾插法
void nin(struct node*head,int data)
{
struct node*pnode=head; //定义一个结构体指针
struct node*newnode=createnode(data);//定义新节点
while(pnode->next!=NULL) //不是最后的节点执行循环
{
pnode=pnode->next; //结构体指针向下走
}
pnode->next=newnode; //循环结束的时候 pnode是最后的节点 最后的节点指向新节点
}
------------------------------------------------------------------------------------------------------------------------------
3.定义结构体数组插入
和尾插法思路相同
//插入(利用结构体数组)
void in(struct node*head,int i)
{
struct node* a[i]; //定义结构体数组
struct node*pnode=head;//定义结构体指针
int n; //循环变量
for(n=0;n<i;n++)
{
a[n]=(struct node*)malloc(sizeof(struct node)); //给每一个数组单元开辟空间
printf("第%d个节点为:",n+1);
scanf("%d",&a[n]->data); //赋值操作
pnode->next=a[n]; //pnode指向当前结构体数组
pnode=a[n]; //pnode移到当前数组
}
pnode->next=NULL;
}
4.遍历链表
//遍历
void print(struct node*head)
{
struct node*pnode=head->next; //定义指针
while(pnode->next!=NULL) //不是链表的最后一个就执行循环
{
printf("%d-->",pnode->data); //打印
pnode=pnode->next; //向下走
}
printf("%d",pnode->data); //结束循环时pnode是最后一个节点 打印
}
5.结果显示