Day17、链式存储结构动态分配内存、栈的顺序存储结构和链式存储结构

复习:数组、指针和数组指针的关系

数组是一串连续的存储空间,数组名对应的是存储空间的首地址,比较安全、

指针有多样性,不安全,但是灵活,容易出现野指针

数组指针的本质是数组,数组里的元素是指针

 ---------------------------------------------------------------------------------------------------------------------------------

 

链式物理结构的动态分配内存、释放

链式物理结构中每个有效结点都应该是动态分配的

链式物理结构中能容纳的数字数量可以灵活变化

 

#include <stdio.h>

#include <stdlib.h>

typedef struct node

{

   int num;

   struct node *p_next;

} node;

int main()

{

   int num = 0;

   node head = {0},tail = {0},*p_tmp = NULL,*p_node = NULL;

   head.p_next = &tail;

   while (1)

    {

       printf("请输入一个数字:");

       scanf("%d",&num);

       if (num < 0)

       {

           break;

 

        }

       p_tmp = malloc(sizeof(node));

       if (!p_tmp)

       {

           continue;

       }

       p_tmp->num = num;

       p_tmp->p_next = NULL;

       for (p_node = &head;p_node != &tail;p_node = p_node->p_next)

       {

           node *p_first = p_node;

           node *p_mid = p_first->p_next;

           node *p_last = p_mid->p_next;

           if (p_mid == &tail)    //插在最后的位置

           {

                p_first->p_next = p_tmp;

                p_tmp->p_next = p_mid;

                break;

           }

       }

    }

   for (p_node = &head;p_node != &tail;p_node = p_node->p_next)

       {

           node *p_first = p_node;

           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");

   

   

释放内存    while (head.p_next != &tail)   // 只要存在有效节点,循环就继续    

    {

           node *p_first = &head;

           node *p_mid = p_first->p_next;

           node *p_last = p_mid->p_next;

           p_first->p_next = p_last; // 先摘出来再释放

           free(p_mid);

           p_mid = NULL;

    }

return 0;

删除一个点时要释放内存:

#include <stdio.h>

#include <stdlib.h>

typedef struct node

{

   int num;

   struct node *p_next;

} node;

int main()

{

   int num = 0;

   node head = {0},tail = {0},*p_tmp = NULL,*p_node = NULL;

   head.p_next = &tail;

   while (1)

    {

       printf("请输入一个数字:");

       scanf("%d",&num);

       if (num < 0)

       {

           break;

 

       }

       p_tmp=(node *)malloc(sizeof(node));

       if (!p_tmp)

       {

           continue;

       }

        p_tmp->nu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值