线性结构即将告一段落,来个简单总结一下。数组
连续存储(数组)spa
//定义一个数组结构体 struct Arr { int * pBase; //保存数组的指针 int len; //保存数组的长度 int cnt; //数组元素的有效个数 };
对数组的操做,主要体如今数据的移动上。好比在插入一个元素和删除一个元素的时候,改位置以后的元素要相对应的前移或后移。结构体内须要三个数组的指针,数组的长度,数组中有效元素的个数,经过这三个参数完成对数组的增添,删除和输出。.net
离散存储(链表)指针
//建立一个结构体 struct Node { int data; struct Node * pNext; };
相对于数组来讲,链表在存储删除过程更加的灵活,增添元素和删除元素,再也不须要对其后的元素进行移动,减小了时间复杂度。建立链表须要多建立一个头指针和头节点,这样方便了对链表的操做。code
栈blog
//节点结构体 typedef struct Node { int data; struct Node * pNext; }NODE,*PNODE; //栈结构体 typedef struct Stack { PNODE pTop; PNODE pBottom; }STACT,*PSTACT;
栈的特性是“先进后出”,全部相对于链表来讲,栈的功能受到了限制,好比说不能从中间插入和删除。栈的结构体中有两个元素,指针栈顶和指针栈底,栈底永远指向一个无没有实际意义的元素,这就好像链表中的头节点,都是方便了操做。队列
队列 ci
//定义机构体 typedef struct Queue { int * pBash; //存放数组 int front; //队列第一个元素下标 int rear; //队列最后一个元素的下一个元素的下标 }QUEUE,* PQUEUE;
队列的操做要比以前的三种方式都复杂一些,尤为是要用数组实现静态队列的时候,必须是一个循环队列。结构体中包含三个元素,第一个指针变量保存的是数组的首地址,front是队列头部的下标,rear保存的是队列尾部的下标,队列的特性是"先进先出",须要注意的是,在判断静态队列是否已满的状况,更经常使用的作法是,空出一个存储单元不使用,判断【queue -> front == (queue -> rear + 1)%数组长度】便可。一样的,队列也不容许在数组的中间进行插入和删除。get
学PHP的小蚂蚁 博客 http://my.oschina.net/woshixiaomayi/blog博客