链式物理结构(动态分配节点)

来源:互联网 发布:施工组织设计软件 编辑:程序博客网 时间:2024/06/05 17:05

//以动态分配内存的方式插入新节点

include

include

struct node{
int num;
node* p_next;
};
int main()
{
//定义首尾节点
node head = {0};
node tail = {0};
head.p_next = &tail;
int num;
//循环添加新节点
while(1)
{
//为新节点动态分配内存
node* p_node = (node*)malloc(sizeof(node));
//输入数字为负数时,终止输入
printf(“请输入一个非负数:”);
scanf(“%d”, &num);
if (num < 0)
{
break;
}
//分配内存失败,终止
if (!p_node) break;
//为新节点赋值
p_node->num = num;
p_node->p_next = NULL;
//将新节点插入到链式物理结构中
for(node* pn_tmp = &head; pn_tmp != &tail; pn_tmp = pn_tmp->p_next)
{
node* p_first = pn_tmp;
node* p_mid = p_first->p_next;
node* p_last = p_mid->p_next;
//指向最后一个节点时直接插入 或 输入数字大于当前值时插入到下一个位置
if (p_mid == &tail || p_mid->num > p_node->num)
{
//节点插入在p_first和p_mid之间
p_first->p_next = p_node;
p_node->p_next = p_mid;
break;
}
}
}
//输出链式物理结构中的所有元素
for(node* pn_tmp = &head; pn_tmp != &tail; pn_tmp = pn_tmp->p_next)
{
node* p_first = pn_tmp;
node* p_mid = p_first->p_next;
node* p_last = p_mid->p_next;
if (p_mid != &tail)
{
printf(“%d “, p_mid->num);
}
}
printf(“\n”);
//释放动态分配的节点
for(node* pn_tmp = &head; pn_tmp != &tail; pn_tmp = pn_tmp->p_next)
{
node* p_first = pn_tmp;
node* p_mid = p_first->p_next;
node* p_last = p_mid->p_next;
if(p_mid != &tail)
{
//删除节点
p_first = p_last;
//释放节点
free(p_mid);
//指针置空
p_mid = NULL;
}
}
return 0;
}

阅读全文
0 0
原创粉丝点击