在指针的使用过程中,是最容易出现问题的。就像今天,我本来进行基数排序,但是,因为存储时用数组的,所以导致排序100000的时候,内存提示不足,因此,对于队列的使用,我就想到了使用链式存储。但是,当使用链式存储的时候,一直提示内存不足,把排序数目调到10的时候,也是如此,因此我想到了是程序改出了问题。
下面是定义的结构:
typedef int DataType;
typedef struct queue
{
DataType data;
struct queue * next;
}QueueNode;
typedef struct
{
QueueNode *head,*rear;
int count;//结点数目
}LinkQueue;
下面是队列的初始化:
void InitQueue(LinkQueue *q)
{
q->head->next=NULL;
q->rear->next=NULL;
q->count=0;
}
可以看到在初始化的时候,我们就使用了q->head,并让它的next指向为空,这一句话就是说,我们的q->head在内存中是分配单元的。于是,在程序使用InitQueue来初始化队列的时候,我们必须首先要做的就是为q(指向这个队列)和q->head(头结点)分配存储空间,不然它们的初始化就无法完成。
于是我想到,使用指针的时候,如果我们要使用它的下一个结点(p->next)亦或者是该结构体中的某一个指针(例如:q->head)的话,必须要保证它已经有了自己的存储空间了。
也就是说,如果需要指针的指向的话,那么该指针必须是已经有了自己的内存空间。