小蚂蚁学习数据结构(8)——线性结构——线性结构复习

线性结构即将告一段落,来个简单总结一下。数组

连续存储(数组)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博客