分类 技术 下的文章

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.初始化:

- 阅读剩余部分 -

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

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

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

数据结构:

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

- 阅读剩余部分 -

[学习笔记]静态链表

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

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

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

- 阅读剩余部分 -

[学习笔记]双向链表

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

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

- 阅读剩余部分 -

[学习笔记]循环链表

前面复习了单链表,接着复习循环链表.这里以单链表做示范.

什么是循环链表呢?一般的链表中尾结点的next指向的是NULL值,如果我们现在指向最后一个结点,当我们需要指向第一个结点时就只有重新从头结点开始,浪费了时间,现在我们把尾结点的next指向头结点,这样EndNode->next就是FirstNode的地址了不是?这就叫循环链表.

<<大话>>中说循环链表中不用头指针了,改为尾指针,即它的next值指向尾结点而非头结点.这样Header->next->next就是头结点了,确实很方便,但是依旧用头指针可以吗?我们首先来看下,如果头指针依旧指向头结点,那么我们会发现,如果我们在一个链表处插入一个新的头结点,那么按照循环链表的定义来说,我们应该让尾结点指向这个新的头结点,但是问题出来了,尾结点的内存地址是多少呢?不知道.同样的,如果删除头结点也会出现这个问题.因此,循环链表不用头指针而改用尾指针就解决了这个问题.这也是我自己在练习的时候发现的,困扰我的问题也就迎刃而解了.

- 阅读剩余部分 -

[学习笔记]重新学习数据结构

数据结构其实去年3月份左右就开始自学,一直学到了二叉树,至于为什么要重头再来,有以下2个原因:

1.去年学的时间准确来说是3月份到6月份,说实话,学的并不好,基本上都没有动手敲过代码,对,没有任何代码,只是基于<<大话>>上的代码自己分析了下 懂了其原理,然一个程序员只有动手实践了后才能有更深的体会,其二因为某些原因暑假去了某工厂当暑假工,那种完全的资本主义剥削的工厂,所以每天真的没有什么时间来继续学习,所以暑假做的也只是趁每天午休半小时的时候啃完了英文版的<<C traps and pitfalls>>,其它的根本找不到时间,时间一久,很多东西就忘记了.而付出的代价就是开学后把<<C primier Plus>>,<<Pointers on C>>重新啃了一遍.数据结构?说实话,基本忘记了.
2. 一个伟大的程序猿的基础肯定是好的,而我却连数据结构都没自学完(指的是基本的链表,图,树,查找等基本知识,非精通,请勿钻牛角尖用诸如"我学了10年C语言都不敢说学完"之类的话来吐槽我,谢谢:)),同时在学习数据结构的时候深深被那些东西给吸引了,它的魅力,恩,允许我这么说(事实上也确实是)而再写了一些小东西的时候更觉如此.

- 阅读剩余部分 -