对指针的理解

在看《啊哈算法》觉得自己好像懂了指针 本来想发到如何理解指针那个知乎问题上去的 但是看到珠玉在前 还是自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;
}



猜你喜欢

转载自blog.csdn.net/yyyccww/article/details/54581730
今日推荐