C语言程序:实现链表反转与二进制表示
需积分: 10 80 浏览量
更新于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 上传
197 浏览量
2010-05-23 上传
2012-06-05 上传
2015-04-28 上传
jiangqinghua1041
- 粉丝: 0
- 资源: 5
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程