data structure 杂物间

小插曲:写作风格想渐渐地由便于理解的语言向最精简的叙述方式转变。(严谨的风格保持不变且在努力提高中:))

整理一下数据结构所涉及到的一些CC++中的基础知识。

  • 结构型

结构型的作用就是满足对数据类型的需求的补充,我们可以自己创造合适自己的数据类型,例如现有int,char等数据类型,我们可以:

1
2
3
4
5
typedef struct 
{
int a ;
char b ;
}typeA;

这样就定义了一个typeA类型的数据类型。

他的使用需要注意:typeA a[3]这句话是定义了一个typeA类型的数组a[]。这个数组是由a[0]a[1]a[2]组成,且a[0]中由2个分别为intchar组成。使用a[0].a调用。

所以,这里的a[]可以理解为是一个二维数组了。需要理解一下。

  • 使用自己定义的结构型构造结点

构造一个链表结点,分为两步:
第一步:构造出需要的结构型(链表结点的定义):

1
2
3
4
5
typedef struct Node
{
int a;
struct Node *next;
}Node;

构造出一个Node型,里面是一个int型的数据域,一个是Node型的指针。

第二步:构造出结点(用一个指针指向他):

1
2
Node *p;
p=(Node*)malloc(sizeof(Node));

定义了一个p指针指向了结点,结点构造成功。结点的名字为p,这里的第2句的意思自行google
如果我们想要取出这个结点的data赋给x,那么应该这样做:x=p->data,或者可以这样x=(*p).data
这里主要是指针的使用注意点。
注意,这里的p命名了两个东西:一个是结点,另一个是指向这个结点的指针。所以p既是指针名又是结点名。

  • #definetypedef的使用

请看实例:

1
2
3
4
5
6
7
8
9
10
11
12
#define error 1
#define ok 0
typedef bool status
typedef int elemtype

status f(elemtype a)
{
if (a>0)
return error;
else
return ok;
}

上面这个代码其实就是这个意思:

1
2
3
4
5
6
7
bool f(int a )
{
if (a>0)
return 1;
else
return 0;
}

typedef是为变量起一个新名字,#define则是定义一个常量,也可以理解为为常量起一个新名字。
这样的用法的意义是可以当你有多个地方的int型的变量想要修改为char型的时候,不要一个一个的去修改,直接将typedef int xx改成typedef int yy就可以一下子全部修改了。

还有需要补充的小知识点再补充。。