文档详情

数据结构——用C语言描述(第3版)-算法实现模板(C语言).docx

发布:2022-02-24约4.67千字共8页下载文档
文本预览下载声明
《数据结构(第三版)》 耿国华等编 高等教育出版社 本书中的算法实现模板(C语言) 数据结构的学习既有很强的理论性还有较强的实践性。书中算法描述采用的都是标准C函数。当需要在计算机上完整地实现算法时,必须设计构造一个完整的可以执行的源程序。 下面给出单文件算法实现模板和多文件算法实现模板。 [程序实例]:将元素非递减的顺序表LA和LB,合并为LC,要求合并后的LC仍为非递减。 模板一:单文件结构模板 考虑到初学者对多文件结构不熟悉,首选给出一个单文件结构的算法实现模板。 #include stdio.h /*包含C库头文件*/ #include stdlib.h #define MAXSIZE 100 /* 必要的宏定义*/ #define OK 1 #define ERROR 0 typedef int ElemType; //假设顺序表中的数据元素是整型 typedef struct{ ElemType elem[MAXSIZE]; int last; }SeqList; /*函数声明*/ void InitList(SeqList *L); int InsList(SeqList *L,int i,ElemType e); void InputList(SeqList *L); void OutputList(SeqList L); void merge(SeqList *LA, SeqList *LB, SeqList *LC); int main() { SeqList L1,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); return 0; } /*初始化顺序表*/ void InitList(SeqList *L) { L-last=-1; } /*在顺序表L中第i个数据元素之前插入一个元素e。 插入前表长n=L-last+1,i的合法取值范围是 1≤i≤L-last+2 */ int InsList(SeqList *L,int i,ElemType e) { int k; 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); } /*为顺序表赋值*/ void InputList(SeqList *L) { ElemType d; scanf(%d,d); while(d!=-100) { InsList(L,L-last+2,d); /*调用插入操作,将新输入的元素放入顺序表的末尾*/ scanf(%d,d); } } /*输出顺序表中的元素*/ void OutputList(SeqList L) { int i; for(i=0;i=L.last;i++) printf(%d ,L.elem[i]); } /*将元素非递减的顺序表LA和LB,合并为LC。合并后的LC仍为非递减*/ void merge(SeqList *LA, SeqList *LB, SeqList *LC) { int i,j,k; i=0;j=0;k=0; while(i=LA-lastj=LB-last) if(LA-elem[i]=LB-elem[j]) { LC-elem[k]= LA-elem[i]; i++; k++; } else { LC-elem[k]=LB-elem[j]; j++; k++; } while(i=LA-last)
显示全部
相似文档