对指针的理解

在看《啊哈算法》觉得自己好像懂了指针 本来想发到如何理解指针那个知乎问题上去的 但是看到珠玉在前 还是自high比较好。。


指针有类型 所以有int *p double *p等等 *在这儿的作用是申明一个指针

指针指向地址 所以有p=&a

a是一个与前面申明的*p相同类型的东西 &是取地址符 就是把a的地址储存到p里

 

 

链表由一个个节点组成


用结构体来描述节点 由上图可以看到节点由它本身储存的数和后面的指向组成。这个指向就是为了实现下面这种情况


 根据这个思路就可以理解链表了 下面的代码就实现了一个链表 虽然没什么卵用。。

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
//此结构体用来表示链表的节点类型
struct node
{
int data;
struct node *next;
};
int main()
{
struct node *head,*p,*q,*t;
int i,n,a;
cin>>n;
head=NULL;//头指针初始为空
for(i=1;i<=n;i++)
{
cin>>a;
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=NULL;
if(head==NULL)
head=p;
else
q->next=p;

q=p;
} 
t=head;
while(t!=NULL)
{
cout<<t->data<<" ";
t=t->next;
}
}


但是 只要在适当的位置输入要插入的数字 把链表遍历一遍找到合适的位置插进去就可以了

cin>>a;
t=head;
while(t!=NULL)
{
if(t->next==NULL||t->next->data>a)
//当前节点是最后一个节点或者下一个节点的值大于待插入数的时候插入
{
p=(struct node*)malloc(sizeof(struct node));
p->data=a;
p->next=t->next;
t->next=p;
break;//插入完了就可以结束了
}
t=t->next;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值