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

痴心易碎 提交于 2019-12-05 02:34:42

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

连续存储(数组)

//定义一个数组结构体
struct Arr
{
    int * pBase;  //保存数组的指针
    int len;       //保存数组的长度
    int cnt;       //数组元素的有效个数
};

    对数组的操作,主要体现在数据的移动上。比如在插入一个元素和删除一个元素的时候,改位置之后的元素要相对应的前移或后移。结构体内需要三个数组的指针,数组的长度,数组中有效元素的个数,通过这三个参数完成对数组的增添,删除和输出。

离散存储(链表)

//创建一个结构体
struct Node
{
    int data;
    struct Node * pNext;
};

    相对于数组来说,链表在存储删除过程更加的灵活,增添元素和删除元素,不再需要对其后的元素进行移动,减少了时间复杂度。创建链表需要多创建一个头指针和头节点,这样方便了对链表的操作。


//节点结构体
typedef struct Node
{
    int data;
    struct Node * pNext;
}NODE,*PNODE;
 
//栈结构体
typedef struct Stack
{
    PNODE pTop;
    PNODE pBottom;
}STACT,*PSTACT;

    栈的特性是“先进后出”,所有相对于链表来说,栈的功能受到了限制,比如说不能从中间插入和删除。栈的结构体中有两个元素,指针栈顶和指针栈底,栈底永远指向一个无没有实际意义的元素,这就好像链表中的头节点,都是方便了操作。

队列 

//定义机构体
typedef struct Queue
{
    int * pBash;  //存放数组
    int front;     //队列第一个元素下标
    int rear;      //队列最后一个元素的下一个元素的下标
}QUEUE,* PQUEUE;

    队列的操作要比之前的三种方式都复杂一些,尤其是要用数组实现静态队列的时候,必须是一个循环队列。结构体中包含三个元素,第一个指针变量保存的是数组的首地址,front是队列头部的下标,rear保存的是队列尾部的下标,队列的特性是"先进先出",需要注意的是,在判断静态队列是否已满的情况,更常用的做法是,空出一个存储单元不使用,判断【queue -> front == (queue -> rear + 1)%数组长度】即可。同样的,队列也不允许在数组的中间进行插入和删除。


学PHP的小蚂蚁 博客 http://my.oschina.net/woshixiaomayi/blog



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!