目录
一、背景
在C++中,结构体(struct)和共同体(union)都是用户自定义的数据类型,用来将不同的数据类型组合在一起。它们有一些相似之处,但也有重要的区别。
二、结构体与共同体
2.1、结构体(struct)
2.1.1、定义
结构体用于将不同的数据类型组合在一起,每个成员都有自己的内存空间,成员之间互不影响。
2.1.2、特点
- 每个成员都有独立的内存空间。
- 可以包含不同的数据类型。
- 成员变量可以同时访问和使用。
- 内存大小是所有成员大小的总和。
2.2、共同体(union)
2.2.1、定义
共同体(也称为共用体)用于将不同的数据类型组合在一个内存空间中,所有成员共享同一块内存。这意味着在一个时间点上只能有一个成员有效。
2.2.2、特点
- 所有成员共享同一块内存。
- 在任何时刻只能使用一个成员,修改一个成员会影响其他成员的值。
- 内存大小由最大的成员决定。
- 常用于节省内存或实现类型转换等底层操作。
三、结构体与共同体相关算法总结
/* 1、用指针和结构体实现一双向链表,并实现其相应的增、删、遍历功能,并在实例中应用它。*/
#include <iostream.h>
typedef struct node
{
int number;
struct node *next;
struct node *parent;
}Node,*LinkNode;
class LinkClass
{
public:
LinkNode first,current;//头指针,当前指针
void init();//初始化函数
LinkNode Insert(int data,LinkNode cur);//插入函数
void Remove(LinkNode p);//删除函数
void Prior(LinkNode head);//遍历函数
};
void LinkClass::init()
{
struct node *head=new struct node;
struct node *tail=new struct node;
head->parent=NULL;
head->next=tail;
tail->parent=head;
tail->next=NULL;
first=current=head;
}
LinkNode LinkClass::Insert(int data,LinkNode cur)
{
struct node *newNode=new struct node;
newNode->number = data;
newNode->next = cur->next;
cur->next = newNode;
newNode->parent = cur;
newNode->next->parent = newNode;
cur=newNode;
return cur;
}
void LinkClass::Prior(LinkNode head)
{
LinkNode cur=head->next;
while(cur->next!=NULL)
{
cout<<cur->number<<" ";
cur=cur->next;
}
cout<<""<<endl;
}
void LinkClass::Remove(LinkNode cur)
{
LinkNode temp=cur;
temp->parent->nex