单链表
简单的数据结构->链表
内存由好几部分组成
代码区 | 全局区 | 常量区 | 栈区 | 堆区 |
---|---|---|---|---|
存储函数的二进制代码 | 存放全局变量 | 存储字符,常量 | 存放局部变量等(小) | 人为分配(很大) |
链表里面的数据就是存储在堆区的
重要的内存分配函数malloc();
从堆区分配n字节的空间(void*)malloc(n);
下面是代码(请不要在意本人拙劣的技术)
#include <iostream>
using namespace std;
struct node {
int x;
int y;
node* next;
};
struct list {
node* start;
node* rear;
int count;
};
void ini(list **plist)
{
(*plist) = (list*)malloc(sizeof(list));
(*plist)->count = 0;
}
void insert(node *pnode,list*plist)
{
pnode->x = rand() % 10;
pnode->y = 99;
if (plist->count != 0)
{
pnode->next = plist->start;
plist->start = pnode;
plist->count++;
}
else
{
pnode->next = NULL;
plist->rear = pnode;
plist->start = pnode;
plist->count = 1;
}
}
void out(node* pnode, list* plist)
{
node* out;
out = plist->start;
printf("%d %d\n", out->x, out->y);
for (int i = 1; i < plist->count; i++)
{
out = out->next;
printf("%d %d\n", out->x, out->y);
}
}
int main()
{
list* plist;
ini(&plist);
node* pnode;
for (int i = 0; i <= 9; i++)
{
pnode = (node*)malloc(sizeof(node));
insert(pnode, plist);
}
out(pnode, plist);
cout << plist->count;
system("pause");
return 0;
}
有一些问题我记下来以后解决
1.初始化函数ini()无法以&plist = (list*)malloc(sizeof(list));代替
2.pnode的原来的内存空间如果没有指针指向但是记住地址会不会被系统回收
问题一已经解决了,应该是plist = (list*)malloc(sizeof(list));因为plist本来就是结构指针,
指向一个结构体,应该是让他指向一个结构体,而&plist是plist的地址,
只是一个指针指向结构体的起始位置,当然不能修改他自己的地址。