C语言关键字系列二

  1. struct(结构体)

作用:将多种数据组合起来成为一个整体使用,满足信息流传递使用;可根据需求量身定制;每个成员可同时利用;

尤其要注意声明时花括号右侧的分号;

定义有两种形式:一种是在声明后面直接加上该类型的变量名,第二种是利用结构体单独定义变量;

结构体名是结构体类型的标志,花括号内部是结构体的各个成员,每个成员都要进行类型声明,成员也可以是另外一个已经定义的结构体类型变量;

结构体定义是只是描述结构的组织形式,不分配内存,只有利用结构体类型定义变量时才分配内存;

“.”是成员运算符,在所有运算符中优先级最高,无法对结构体整体进行操作,只可以对其成员进行操作;示例:

struct student
{  int num;    //每个成员都要有类型声明,和一般变量定义一样;
   char name[20];
   float score;
};    //注意该‘;’不可以省略;
struct student stu,*p;    
p=&stu;    //p中存放着结构体变量stu在内存中的首地址;
           //注意不能用指向结构体变量的指针指向该结构体变量的某个成员:p=&stu.num;是错误的;
访问结构体成员变量的三种方法:
①stu.num、stu.name、stu.score
②(*P).num、(*p).name、(*p).score    //括号不能省略
③p->num、p->name、p->score

注意以下几种运算:注意p->num是一个整体,->运算符优先级高于++
p->num    //得到p指向结构体变量成员num的值
p->num++  //得到p指向结构体变量成员num的值,用完后该值加1
++p->num  //使得p指向结构体变量成员num的值加1;

结构体变量内部成员的赋值必须在结构体变量的花括号里面,且每个成员之间用逗号分开;

结构体变量内存空间分配(为了减少内存空洞):原则一是不足int型的变量统一按照int型变量的大小(4字节)计算,大于4字节的数据类型按其本身大小计算(字对齐);原则二是后一个变量若能够在前一个成员变量分配的空间剩余空间里存放下,则后面一个成员变量不在重新分配空间;原则三是若成员最大的short int类型,则统一按照short int类型的大小(2字节)计算大小(半对齐),同样若后面的可以利用前面一个成员剩余的空间,则不在额外重新分配;一般的做法是将同种类型的成员放到一起,紧紧挨着;示例:

struct node
{char ch;    //4
  int num;    //4
  char ch1;   //4
  char ch2    //0,利用上一个剩余的,不在额外分配
};     //该结构体变量占12个字节
  1. union(共用体)

作用:当多种类型、多个对象只取一时(n选1),我们也可以使用联合体发挥其长处,就是几个不同的变量共占同一段内存空间;

可以利用共用体验证大小端(第一个成员是short型,第二个是char型);

Big_endian 大端字节序: 数据的高字节位存储在低地址对应的存储单元;

Little_endian 小端字节序:数据的低字节位存放在低地址对应的存储单元。

共用体存储:是内部选择项最大的一个,总数是4的整数倍;

  1. enum(枚举)

作用:经常作为Switch的标签;

  1. typedef

作用:为一种数据类型定义一个新名字,简洁地使用,大量的应用在嵌入式系统移植中;示例:

typedef unsigned long unit32;    //将无符号长整型变个名称为unit32;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会根据您的要求进行操作。以下是C语言代码实现简单选择排序算法,并对给定关键字系列进行排序的过程: ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 typedef struct Node { int key; // 关键字 struct Node *next; // 下一个节点的指针 } Node; // 创建新节点 Node* createNode(int key) { Node *newNode = (Node*)malloc(sizeof(Node)); newNode->key = key; newNode->next = NULL; return newNode; } // 打印链表 void printList(Node *head) { printf("List: "); Node *p = head; while (p != NULL) { printf("%d ", p->key); p = p->next; } printf("\n"); } // 简单选择排序 void selectionSort(Node *head) { Node *p, *q, *min, *minPrev, *prev; p = head; while (p != NULL) { min = p; minPrev = prev = NULL; q = p->next; while (q != NULL) { if (q->key < min->key) { min = q; minPrev = prev; } prev = q; q = q->next; } if (min != p) { if (minPrev != NULL) { minPrev->next = p; } else { head = min; } prev = p->next; p->next = min->next; min->next = prev; p = min; } else { p = p->next; } } } int main() { // 创建链表 Node *head = createNode(54); head->next = createNode(37); head->next->next = createNode(9); head->next->next->next = createNode(25); head->next->next->next->next = createNode(17); head->next->next->next->next->next = createNode(68); head->next->next->next->next->next->next = createNode(5); head->next->next->next->next->next->next->next = createNode(41); head->next->next->next->next->next->next->next->next = createNode(76); head->next->next->next->next->next->next->next->next->next = createNode(23); // 打印未排序前的链表 printList(head); // 对链表进行简单选择排序 selectionSort(head); // 打印排序后的链表 printList(head); return 0; } ``` 输出结果为: ``` List: 54 37 9 25 17 68 5 41 76 23 List: 5 9 17 23 25 37 41 54 68 76 ``` 以上就是使用C语言以单链表为存储结构,实现简单选择排序算法,并将给定的关键字系列进行排序的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值