数据结构与算法——用C语言描述(第3版)算法实现模板(C语言).pdf
《数据结构(第三版)》耿国华等编高等教育出版社
本书中的算法实现模板(C语言)
数据结构的学习既有很强的理论性还有较强的实践性。书中算法描述采用的
都是标准C函数。当需要在计算机上完整地实现算法时,必须设计构造一个完整
的可以执行的源程序。
下面给出单文件算法实现模板和多文件算法实现模板。
[程序实例]:将元素非递减的顺序表LA和LB,合并为LC,要求合并后的LC
仍为非递减。
模板一:单文件结构模板
考虑到初学者对多文件结构不熟悉,首选给出一个单文件结构的算法实现模
板。
#includestdio.h/*包含C库头文件*/
#includestdlib.h
#defineMAXSIZE100/*必要的宏定义*/
#defineOK1
#defineERROR0
typedefintElemType;//假设顺序表中的数据元素是整型
typedefstruct{
ElemTypeelem[MAXSIZE];
intlast;
}SeqList;
/*函数声明*/
voidInitList(SeqList*L);
intInsList(SeqList*L,inti,ElemTypee);
voidInputList(SeqList*L);
voidOutputList(SeqListL);
voidmerge(SeqList*LA,SeqList*LB,SeqList*LC);
《数据结构(第三版)》耿国华等编高等教育出版社
intmain()
{
SeqListL1,L2,L3;/*定义三个顺序表*/
InitList(L1);/*分别予以初始化*/
InitList(L2);
InitList(L3);
printf(\nL1:按非递减顺序输入若干元素,空格分开,数目=50,以-100结
束\n);
InputList(L1);
printf(\nL2:按非递减顺序输入若干元素,空格分开,数目=50,以-100结
束\n);
InputList(L2);
merge(L1,L2,L3);
printf(\n顺序表L1和L2合并后的结果为:\n);
OutputList(L3);
return0;
}
/*初始化顺序表*/
voidInitList(SeqList*L)
{
L-last=-1;
}
/*在顺序表L中第i个数据元素之前插入一个元素e。插入前表长n=L-last+1,
i的合法取值范围是1≤i≤L-last+2*/
intInsList(SeqList*L,inti,ElemTypee)
{
intk;
if((i1)||(iL-last+2))/*首先判断插入位置是否合法*/
{
《数据结构(第三版)》耿国华等编高等教育出版社
printf(插入位置i值不合法);
return(ERROR);
}
if(L-last=MAXSIZE-1)
{
printf(表已满无法插入);
return(ERROR);
}
for(k=L-last;k=i-1;k--)/*为插入元素而移动位置*/
L-elem[k+1]=L-elem[k];
L-elem[i-1]=e;/*在C语言数组中,第i个元素的下标为i-1*/
L-last++;
return(OK);
}
/*为顺序表赋值*/
voidInputList(SeqList*L)
{
ElemTyped;
scanf(%d,d);
while(d!=-100)
{
InsList(L,L-last+2,d);/*调用插入操作,将新输入的元素放入顺序表
的末尾*/
s