C语言学习--链式物理结构(代码笔记)

C语言学习–链式物理结构

动态分配内存
源代码

#include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 typedef struct node{
  5     int val;
  6     struct node* p_next;
  7 }node_t;
  8 int main(void)
  9 {
 10     node_t head = {0},tail = {0};
 11     int arr[] = {10,5,13,45,89,45};
 12     int num;
 13     //没有节点的线性链式物理结构
 14     head.p_next = &tail;
 15     node_t* p_node;
 16     node_t* p_tmp = NULL,*p_first = NULL,*p_mid = NULL,*p_last = NULL;
 17     for(num = 0;num < (sizeof(arr) / sizeof(arr[0]));num ++)
 18     {
 19         //动态分配节点来记录新的数字
 20         p_node = (node_t*)malloc(sizeof(node_t));
 21         if(!p_node){
 22         //动态分配失败
 23             continue;
 24         }
 25         p_node->val = arr[num];
 26         p_node->p_next = NULL;
 27			//按照从小到大的顺序把新的节点插入到链式物理结构中
 28         for(p_tmp=&head;p_tmp!=&tail;p_tmp=p_tmp->p_next)
 29         {
 30             p_first = p_tmp;
 31             p_mid = p_first->p_next;
 32             p_last = p_mid->p_next;
 33             if(p_mid == &tail || arr[num] < p_mid->val)
 34             {
 35                 p_first->p_next = p_node;
 36                 p_node->p_next = p_mid;
 37                 break;
 38             }
 39         }
 40     }
 41     for(p_tmp=&head;p_tmp!=&tail;p_tmp=p_tmp->p_next)
 42     {
 43         p_first = p_tmp;
 44         p_mid = p_first->p_next;
 45         p_last = p_mid->p_next;
 46         if(p_mid!=&tail)
 47             printf("%d ",p_mid->val);
 48     }
 49     //释放所有动态分配的节点
 50     while(head.p_next != &tail)
 51     {
 52         p_first = &head;
 53         //p_mid指针指向第一个有效节点,也就是要释放的节点
 54         p_mid = p_first->p_next;
 55         p_last = p_mid->p_next;
 56         //把p_mid指针指向的节点从链式物理结构中摘出来
 57         p_first->p_next = p_last;
 58         free(p_mid);
 59         p_mid = NULL;
 60     }
 61     printf("\n");
 62     return 0;
 63 }

程序的输出结果:
5 10 13 45 45 89

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值