链表:
尾插:
void push_back(struct Node *pHead,int n)
{
if(isEmpty(pHead))//首先判断是否为头链表;
{
push_front(pHead,n);//是直接用头插;
}
else
{
struct Node *p = pHead->next;
while(p->next != NULL)
{
p = p->next;
}
struct Node *pNew = malloc(sizeof(struct Node));
p->next =pNew;
pNew->next = NULL;
pNew->data = n;
}
}
头删:
void pop_front(struct Node *pHead)
{
if(!(isEmpty(pHead)))
{
struct Node *p = pHead->next;
pHead->next = p->next;
free(p);
}
}
尾删:
void pop_back(struct Node *pHead)
{
if(size(pHead) >= 2)
{
struct Node *p = pHead->next;
while(p->next->next != NULL)
{
p = p->next;
}
free(p->next);
p->next = NULL;
}
else
{
pop_front(pHead);
}
}
释放空间
void clear(struct Node *pHead)
{
while(!isEmpty(pHead))//链表个数
{
pop_front(pHead);//用头删效率快
}
}
共用体:
共用体(Union
)是一种特殊的数据类型,
它允许在同一个内存位置存储不同的数据类型。
共用体的所有成员共享同一块内存空间,
因此同一时间只能存储其中一个成员的值。
共用体的定义和结构体类似,使用关键字union
,后面跟着成员列表。
每个成员可以是不同的数据类型
共用体的主要特点:
- 共用体的大小取决于最大的成员的大小。
- 共用体的成员共享同一块内存空间,只能同时存储其中一个成员的值。
- 对共用体的任何成员的修改都会影响到其他成员。
- 共用体的成员可以具有不同的数据类型,但它们在内存中的起始位置是相同的。
共用体的主要用途有:
- 节省内存空间:当多个成员变量不会同时使用,但需要共享同一块内存空间时,可以使用共用体来节省内存。
- 数据类型转换:共用体可以用于不同类型之间的转换,通过存储一个成员变量,然后通过另一个成员变量来读取转换后的值。
union Demo
{
int i;
short s;
char c;
};
小端存储
int bigOrLitter(union Demo *d)
{
d->i = 0x12345678;
if(d->c == 0x78)
{
printf("小端存储\n"};
else
{
printf("大端存储\n");
}
}
枚举类型:
枚举类型与整型兼容
enum Week//名称
{
Sun,Mon,Tue,Wes,Thu,Fri,Sat//成员
};
typedef定义类型:
typedef可以改变类型名称
typedef int INT;//INT与int类型一样,名称不同;
typedef int ARRAY[10];
int main(void)
{
INT i;
ARRAY a;
printf("%lu\n",sizeof(i));
printf("%lu\n",sizeof(a));
return 0;
}
位运算:
所有操作数为整型与和整型相兼容的类型;
&:指定位清零
|:指定位置1
^:指定位翻转
~:指定位取反
<<:使整体左移,后面补0;
>>:使整体右移,该数有符号时,正数补0,负数补1;无符号时,补0;