单片机初级编程不需要这些知识。
但是要做高级编程,比如移植操作系统或者编写系统,就离不开文件管理。
数据结构中的线性表和队列肯定会用到链表;链表的主要功能是灵活存储数据。事实上,如果你不不要把事情搞得很复杂,使用链表会为系统省钱,但是这个开销完全可以忽略不计。在c语言中,如果你是初学者,只需要知道链表的用法就可以了,因为初学者用的程序一般都可以用简单的数组代替链表。
我花了半个小时写了一个简单的例子。下面是在vs2005中成功调试,文件名为test.txt,在当前目录下。
#包含ltstdio.hgt
#包含ltstdlib.hgt
#定义正确1
#定义假0
typedef结构节点
{
整数
int分数
结构节点*下一个
}节点,*链接列表
voidinitlinklist(linklist*l)//初始化单个链表,并建立一个前导节点的空链表。
{
*l(node*)malloc(sizeof(node))
(*l)-gtnextnull
}
void创建链表(链表l)//通过尾部插入创建一个链表。
{
节点*r,*s
rl
intinum,iscor
功能接口定义:
列表合并(列出l1,列出l2)
列表结构定义如下:
typedef结构节点*ptrtonode
结构节点{
elementtypedata/*存储节点数据*/
ptrtonodenext/*指向下一个节点的指针*/
}
typedefptrtonodelist/*定义单一链接列表类型*/
l1和l2给出了主节点的单链表,存储在它们的节点中的数据按升序排列;函数merge是将l1和l2合并成一个非递减的整数序列。您应该直接使用原始序列中的节点,并返回合并的前导节点的链表头指针。
样本裁判测试程序:
#包含ltstdio.hgt
#包含ltstdlib.hgttypedefintelementtype
typedef结构节点*ptrtonode
结构节点{
元素类型数据
ptrtonode下一个
}
typedefptrtonode列表
listread()/*此处未显示详细信息*/
无效打印(列表l)/*此处未显示详细信息;空链表将输出null*/
列表合并(列出l1,列出l2)
intmain()
{
列出l2l1
l1·里德
l2·里德
l合并(l2l1)
打印(左)
印刷品(l1)
印刷品(l2)
返回0
}
/*您的代码将嵌入此处*/
输入样本:
三
135
五
246810
输出样本:
123456810
空
空
从后面打印的两个null可以看出,这个操作是把l1和l2的节点再次挂在l3的节点上,l1、l2和l3都是头节点,最后实现代码。
列表合并(列出l1,列出l2)
{
列出pa、pb、pc、l
l(list)malloc(sizeof(structnode))
pal1-gtnext//指向pa的第一个元素。
pbl2-gtnext//指向pb的第一个元素。
pcl
while(paampamppb)
{
if(pa-gtdataltpb-gtdata)
{
pc-gtnextpa
pcpa
papa-gtnext
}
其他
{
pc-gtnextpb
pcpb
pbpb-gtnext
}
}
中频(pa)
{
pc-gtnextpa
}
中频(铅)
{
pc-gtnextpb
}
l1-gtnextnull
l2-gtnextnull
返回l
}