今天上午写了一下动态分配的链表数组,实现一个图。步骤如下:
1. 图中的节点的数据结构:
2. 首先要动态分配节点的指针数组。
要实现动态的分配指针数组,当然要使用库函数malloc或者new方法去申请一大块内存。比如要申请num个node *类型的内存:
(1) malloc方法
link *adj = (node **)malloc(sizeof(node*) * num);
注意:后面要要free(),将申请的内存释放掉哦。 new也一样,要用delete()释放内存。
使用指针创建和使用动态数组的详细讲解在《C专家编程》里的10.7(page232)
(2) new方法
link *adj = (node **)new(std::nothrow) char[sizeof(node*) * num];
3. 输入时,将节点加入链表中来。有两种方法:
(1) 在链表首节点插入
adj[i] = new node(j, adj[i]);
(2) 在链表的尾节点插入
下面来看下动态分配二维数组,步骤如下:
方法一:
用一维数组的方法来表示二维数组:
int *arrayp = (int *)malloc(sizeof(int) * row * colum);
方法二:
用malloc动态分配:
int **arrayp = (int **)malloc(sizeof(int *) * row);
memset(arrayp, 0x00, row);
for (int k = 0; k < row; k ++)
{
arrayp[k] = (int *)malloc(sizeof(int) * colum);
memset(arrayp[k], 0x00, colum);
}
方法三:
用new动态分配:
//new 动态分配二维数组
int **arrayp = new int* [row];
for (int m = 0; m < row; m++)
{
arrayp[m] = new int[colum];
}