数据结构:广义表

本文介绍了C语言中广义表的定义,包括表头、表尾的符号表示,以及结构体GLNode和共用体union在其中的应用,展示了如何使用union节省内存空间。
摘要由CSDN通过智能技术生成

定义:有序数列  表示GL=(a(b,c))长度 2,

表头:a 表尾:(b,c)符号:head(A)=a ,tail(A)=((b,c))

广义表的表尾一定是个表,具有递归,元素可以是子表,子表里还有子表

结构体定义

typedef enum{ATOM,LIST} ElemTag;//ATOM=o,表示原子,LIST表示子表
typedef struct GLNode
{
	ElemTag tag;//tafg标识符
	union
	{
		int  atom;
		struct { struct GLNode*tp,*tp; }htp;//表头,表尾,以及表结点的指针域
	} atom_htp; //表头,表尾,以及表结点的指针域的联合体域
}GLNode,*GList;

顺便查了个union

union 是C语言中一种声明共用体的数据类型。
union(共用体)在某种程度上类似struct(结构体)的一种数据结构,可以包含很多数据结构和变量。
union(共用体)的特点:其内部的数据 共用一个内存首地址共享同一段内存,以达到节省空间的目的。

#include <stdio.h>

union Data {
   int i;
   float f;
   char str[20];
};

int main() {
   union Data data;
   
   data.i = 10;
   printf("data.i: %d\n", data.i);
   
   data.f = 3.14;
   printf("data.f: %f\n", data.f);
   
   strcpy(data.str, "Hello");
   printf("data.str: %s\n", data.str);
   
   return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值