[学习笔记]循环队列和队列的链式结构

先来说下队列.其实就是线性表的变种.遵循先进先出,即删除数据的位置为头结点,新增数据的位置为尾结点.恩,就是这么简单...

好了,按照在线性表的顺序存储我们知道了如果我们删除一个数据的话那么时间复杂度为0(N),既然我们现在知道了我们每次删除的都是头结点,咱们定义一个int性的front来存储头结点的下标,那么我们的复杂度就是0(1)了不是,增加数据也就简单了,搞一个int型的rear来存储尾结点的下标,然后增加数据的时间复杂度也为0(1)了,Wow,cool...但是...咱们就想了啊,如果加入在一个可以存储10个数据的队列里,先一口气插入了10个数据,接下来,我们删除前9个数据,那么现在front和rear的值都是9了对不对,好了,我们再新增一个数据,额,都到了数组末尾了,sorry.不能新增了...可是...可是...前面空了9个位置啊亲!咋就不能灵活点嘛!于是乎就有了循环队列.即rear到达了数组末尾的时候再新增数据rear值移到0即数组开头不就行了!好了,有个问题又来了,咱们如何判断队列是满了呢?当rear==front的时候?嘿嘿,那你估计一辈子都插不进数据了,咱们刚开始的时候不是rear就等于front嘛...那咱们再设一个bool型的flag,初始化的时候flag=0表示队列空,然后当满的时候flag设置为1,这样不就解决了问题了嘛,赞一个,确实可以如此,不过也可以这样,那就是咱们留一个位置来不放数据,即(rear+1)%MAXSIZE==Front的时候表示队列满了.ok,上数据结构和代码:

- 全文阅读 -

win32宽字符串处理

国际化还是要UNICODE,不过跟ANSII有些不同,找了些资料.

字符串长度:

WINAPI lstrlenW(LPCWSTR lpString);//(不计算字符串末尾的null)

字符串合并:

LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPWSTR lpString2);//第一个参数是可以存储两个字符串的缓冲区,空间的大小至少要能存储两个需要合并的字符串,包括null终止符。函数返回指向该缓冲区的指针。

字符串转换:

- 全文阅读 -

[学习笔记]链栈及栈的应用

既然栈就是线性表,那么同样的也可以用链表的形式来表示,当然用链表表示的栈有一个学名,曰:链栈.

不过跟链表还是有一些不同,比如说头结点不用了,比如说,咱们得单独鼓捣一个结构体来保存栈顶的地址.好了,其它没什么,用代码说话吧

数据结构:

typedef struct Node{
    char Data;
    struct Node *next;
}*TopStack;

typedef struct {
    int Count;
    TopStack Top;
}TopPointer;

1.初始化:

- 全文阅读 -

一道IQ题引发的思考

微博中看到某友转发一智力IQ题,曰:

小明点了8根蜡烛,风吹灭了3根,然后又被吹灭了2根,为了让其不再被吹灭,小明关住了窗户,蜡烛就没吹灭了!!!问:蜡烛最后还能剩多少根???

- 全文阅读 -

[学习笔记]栈的顺序存储结构及共享栈空间

栈的定义:其实就是线性表.只不过这个线性表遵循"后进先出"的原则.也就是我们插入和删除操作都动最后一个结点.同时我们在线性表中的插入和删除操作给换个一个马甲,它们额马甲号分别叫做push(压栈,进栈)和pop(出栈,弹栈).线性表弄懂了这个就很简单了.

当然了,栈也有顺序存储结构和链式结构.看下栈的顺序存储结构.

数据结构:

typedef struct{
    char Data[MAXSIZE];//用来存储数据
    int Top;//记录栈顶的下标
}SqStack;//栈顺序存储结构数据结构

- 全文阅读 -

[学习笔记]静态链表

说明:这几天有点忙,本来前几天就应该写了的推迟到了今天.

写在前面的话:如果您读到此文,请允许我理解你已经学习了该部分知识,只是对此知识点有不解才被搜索引擎指到这里.如果不是,请自己去看相关数据结构知识.抱歉本文帮不到你:)

首先,什么是静态链表呢?我自己的话说就是为那些没有指针的语言设计的"链表"这种数据结构.其思想就是运用了一维结构数组(当然N维也可以),该结构内不仅有数据域,同时还用一个int型来保存我们的next值,即下一个数据的下标.这样就可以模拟出链表的结构了.这样增删数据的时间复杂度就为O(1)了.因为这个数组的长度是事先规定好了的,不能更改,所以才有了静态链表这个名字.在Weiss的<<数据结构与算法---C语言实现>>里面称此法为游标实现法.

- 全文阅读 -

[学习笔记]双向链表

什么是双向链表呢?其实就是在单链表的基础上添加了小功能,即每个结点不仅有后驱指针域,同时增加了前驱指针域,这样查找数据就更加方便了,比如说当前结点是头结点,如果是要指向尾结点的话就只需要我们把头结点的前驱指针域指向尾结点,这样就可以直接指向尾结点,时间复杂度就为O(1),不过也带来了弊端,即增加了空间的消耗,不过有时候空间换时间还是值得的不是.

同时我们依旧可以使用头结点,跟循环单链表不同,因为结点多了一个前驱指针域,所以使用头指针时增删头,尾结点是可行的,当然,尾指针也一样可以使用,原因相同

- 全文阅读 -