结构体、共用体、枚举、链表

本文详细探讨了C语言中结构体的对齐规则、共用体的内存节省特性,以及结构体、枚举和链表的数据类型应用,包括空链表的创建与插入方法。
摘要由CSDN通过智能技术生成

结构体的大小计算方式

结构体的对齐方式:首先遵循自然对齐。即结构体存放在能被最大成员变量整除的地址。

内部成员按照各自的自然边界对齐。

结构体定义可以分为三种形式:

struct stu         //形式1 先定义类型,后定义变量
{
...
};

struct stu s;


struct stu           //形式2 定义类型的同时定义变量
{
...
}s1,s2,*s3,s4[10];

struct stu s;
 

struct          //形式3 省略了类型名 --如果只用一次,可以这样写
{
...
}s1,s2,*s3,s4[10];

共用体:与结构体较为相似,不过其内部成员共用一块内存,该内存的大小是成员中的最大内存的大小。

考点:用来判断大端小段存储。

union test

{

        int a = 1;

        char b;

};

printf(“%d\n”,b);

判断b 的0和1

共用体的本质上是节省内存。

结构体和共用体都是定义一种数据类型,有了数据类型便可以实现定义变量、数组、指针、函数返回值。

struct member
  {
    char name[20];
    int no;
    union 
    {
        float score; 
        float salary; 
    }d;
  }

枚举:enum是一种基本数据类型,其实质是int数据类型。

其主要作用是用来方便阅读。可以将特定的数字用枚举的元素表示。

枚举也可定义变量、数组、指针、以及函数返回值。


链表

是数据结构中一种组织数据的方式。 

与数组不同的是链表可以实现灵活的增减数据,其缺点也在于访问不够快捷。

节点:
struct Node
{
//数据域 
  struct stu s;
//指针域
  struct Node *p; //指针类型 
}; 

空链表

空链表:
 特点:
  只有头节点
  并且头节点的指针域 为NULL

strcut Node head = {0,NULL};
struct Node *p = &head;

 尾插和头插

//尾插 
  
  思路:
     s1.创建一个新的节点
       struct Node *pNew = malloc(sizeof(struct Node)); 
       //放在了堆区 
       //
     s2.找到尾节点 
       struct Node *p = &head;  //此时p在头节点 
       while( p->next != NULL )
       {
          p = p->next; //让p指向下一个节点 
       }
     s3.链接到尾节点后面
      p->next  = pNew;    
      pNew->next = NULL; //尾节点 
    
   void pushBack(struct Node *head)
   {
       s1.创建一个新的节点
       struct Node *pNew = malloc(sizeof(struct Node)); 
       //放在了堆区 
       //
     s2.找到尾节点 
       struct Node *p = head;  //此时p在头节点 
       while( p->next != NULL )
       {
          p = p->next; //让p指向下一个节点 
       }
     s3.链接到尾节点后面
      p->next  = pNew;    
      pNew->next = NULL; //尾节点 
   }
   
   
   int length(struct Node *head)
   {
      //统计有效节点的个数 
   }
   
    //头插 
    
   void pushFront(struc Node *head,int data)
   {
      //1.创建新节点
      pNew 
      //2.链接 
      pNew->next = p->next;
      p->next = pNew;
   }

注意:创建空链表封装成函数

在创建节点时,将其开辟在堆上。使其长期保存,如果在定义在栈上则在用完之后就会被释放掉,那么数据就不会被保存下来。

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值