指针数组和数组指针/链表的构建和排序
来源:互联网 发布:天赐系统安装软件 编辑:程序博客网 时间:2024/05/21 15:42
在上一篇计算机图形学/扫描线填充算法中,由于每一条扫描线要对应一个链表,所以使用到了指针数组,在对活性边表排序时涉及到链表的排序,这些知识都忘了,现在捡起来。
指针数组
用于存储指针的数组,也就是每个元素都是指针。 int * a[5]; //数组中有5个指针
[ ]的优先级高于*优先级,我认为可以看作int* 是一种类型,定义一个int * 类型的数组,就是指针数组了。
数组指针
指向数组的指针,就是一个指针。 int (*a)[5]; //一个指向有5个元素的数组的指针
int b[5];
a=&b;
经过测试发现,虽然b是数组的首地址,但a=b这种写法编译不通过。
利用a输出b的内容:cout<<(*a)[3];
链表的构建
我的方法是头指针指向的头节点不使用, 将生成的新结点插入到表头。
typedef struct node{ int data; struct node *next;}Node,*pNode;pNode L=new Node; //头指针L->next=NULL;//插入到表头void createLink1( ){ for(int i=1;i<5;i++) { pNode p=new Node; //临时节点 p->data=i; p->next=L->next; L->next=p; //不使用头节点 }}
也可以插入表尾
pNode L=new Node; L->next=NULL;pNode s=L;void createLink2( ){ for(int i=1;i<5;i++) { pNode p=new Node; //临时节点 p->data=i; p->next=NULL; s->next=p; s=s->next; }}
链表的排序
想过使用冒泡排序法,但好像使用的指针很多,没有实现。这里使用简单选择排序算法,在数组排序(从小到大)中,选择排序法每次找到元素中的最小值,放到数组的前面,在链表中,将元素插入到表头比较简单,所以每次找到最大元素,插入到表头,这样最大的元素在表尾,最小元素在表头。
void sortLink(pNode p)//pNode是头指针{ pNode p0=p; while(p0->next) { pNode pmax=p0; pNode p1=p0; pNode pi=NULL; while(p1->next) { if(p1->next->data > pmax->next->data) pmax=p1; p1=p1->next; } pi=pmax->next; //pmax->next中的元素是当前最大元素 pmax->next=pi->next;//取出节点pi //插入到表头 pi->next=p->next; p->next=pi; if(p0==p) p0=pi;//p0始终指向元素最大的节点, //p0->next==NULL表示最大节点已经到表尾 }}
0 0
- 指针数组和数组指针/链表的构建和排序
- 数组指针、 指针数组、函数指针、函数指针数组和指向函数指针数组的指针
- 简述指针数组 数组指针 函数指针 函数指针数组和函数指针数组的指针
- 指针数组的输入输出和排序
- 数组指针和指针数组以及指针的指针
- 指针数组和数组指针的区别
- 指向数组的指针和指针数组
- 指针数组和指向指针的数组
- 指针数组和数组指针的技巧
- 指针数组和指向数组的指针
- 指针数组和数组指针的区别
- 指针数组和数组指针的使用
- 指针数组和数组指针的区别
- 数组指针和指针数组的区别
- 指针数组和数组指针的区别
- 数组指针和指针数组的区别
- 数组指针和指针数组的区别
- 数组指针和指针数组的区别
- MARKDOWN语法总结
- IDFA - 2
- 高斯消元法求解线性方程(c实现)
- React——JSX
- 移动端web页面使用position:fixed问题总结
- 指针数组和数组指针/链表的构建和排序
- 网页设计教程:从设计到制作过程
- 第六例:Activity的切换动画
- tasklet 与 softirq
- pyspark ERROR lzo.GPLNativeCodeLoader: Could not load native gpl library
- c++学习笔记(二):c++拷贝构造函数应用的四种场景
- 动态设置Fragment、view主题
- 多线程阅读收集
- AT指令编程必读