C语言程序:实现链表反转与二进制表示
需积分: 10 49 浏览量
更新于2024-07-27
收藏 155KB DOC 举报
"西工大C语言实验七的两道编程题目,涉及链表操作和二进制表示的转换。"
在这次实验中,我们主要关注两个C语言编程题目,它们都涉及到数据结构和基本算法的运用。第一题是关于链表的操作,包括创建、反转链表以及打印链表元素;第二题则是关于正负整数的二进制表示转换。
首先,让我们深入分析第一题(CH1112):
这个题目要求创建一个单链表,链表中的元素是双精度浮点数。用户输入一系列非负浮点数,当输入为0时结束输入。程序需要构建链表,并打印原始链表,然后反转链表并再次打印。实现这个功能的关键在于理解和操作链表节点。
链表节点定义如下:
```c
struct data {
double a;
struct data *q;
};
```
这里,`a` 存储浮点数,`q` 是指向下一个节点的指针。程序通过 `malloc` 动态分配内存来创建新的节点,并通过指针将新节点连接到链表中。链表的反转是通过交换相邻节点的顺序来实现的,这涉及到对指针的精心操作。
下面是关键代码段的解释:
- `p1->q=p1;` 创建第一个节点。
- `p2->q=p1;` 将新节点连接到链表中。
- `while` 循环读取输入,直到遇到0为止。
- `p2->q=NULL;` 最后一个节点的 `q` 指针设为 `NULL` 表示链表结束。
- 链表反转的部分,通过 `p1->q=p3;` 和 `p1=p1->q;` 更新指针,完成链表反转。
接下来是第二题(CH1205):
这个题目要求将一个正负整数转换为其二进制表示,如果是负数,二进制表示应以1开头,且补足16位。如果输入是正数,二进制表示应补足16位的0。转换过程涉及整数除法和模运算,以及数组存储二进制位。
关键代码如下:
```c
while(n!=0)
{
a[i]=n%2;
n=n/2;
i++;
}
```
这段代码通过不断取模和除以2,将十进制数转换为二进制,并存储在数组 `a` 中。如果输入是负数,还需要对数组进行处理,将所有0改为1(如果存在0的话),并在最前面添加1,确保16位的二进制表示。最后,将数组 `a` 打印出来得到完整的二进制表示。
这两题都是C语言基础的很好练习,涵盖了链表操作、输入输出、整数转换等重要概念,对于学习和理解C语言的数据结构和算法有极大帮助。
2010-09-23 上传
198 浏览量
2010-05-23 上传
2012-06-05 上传
2015-04-28 上传
jiangqinghua1041
- 粉丝: 0
- 资源: 5
最新资源
- 教你怎么写批处理.txt
- C语言 描述 数据采集 程序
- Oracle9i 数据库管理基础 I Ed 1.1 Vol.1
- intel平台的ELF 文件格式
- High.Performance.MySQL_Second.Edition.pdf
- 基于_NET企业信息资源管理系统的设计与实现
- Linux操作系统编程入门
- Ethereal用户手册.pdf
- 基于UDP通信协议的设计与实现
- 红外遥控系统原理及单片机软件解码实例
- 三言两语话Erlang
- java编程入门知识
- NET SQL Server数据访问抽象基础类
- linux 菜鸟过关
- Android 入门教程
- Oracle+9i&10g编程艺术:深入数据库体系结构