数据结构算法整理(c语言版)

上传人:wm****3 文档编号:42022605 上传时间:2018-05-31 格式:DOC 页数:49 大小:284.50KB
返回 下载 相关 举报
数据结构算法整理(c语言版)_第1页
第1页 / 共49页
数据结构算法整理(c语言版)_第2页
第2页 / 共49页
数据结构算法整理(c语言版)_第3页
第3页 / 共49页
数据结构算法整理(c语言版)_第4页
第4页 / 共49页
数据结构算法整理(c语言版)_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《数据结构算法整理(c语言版)》由会员分享,可在线阅读,更多相关《数据结构算法整理(c语言版)(49页珍藏版)》请在金锄头文库上搜索。

1、1数据结构(数据结构(C 语言版)语言版)第二章第二章 线性表线性表算法 2.1void Union(List ElemType e;La_len = ListLength(La); / 求线性表的长度 Lb_len = ListLength(Lb); for (i=1; i L.length+1) return ERROR; / i 值不合法 if (L.length = L.listsize) / 当前存储空间已满,增加容量 ElemType *newbase = (ElemType *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof (

2、ElemType);if (!newbase) return ERROR; / 存储分配失败 L.elem = newbase; / 新基址 L.listsize += LISTINCREMENT; / 增加存储容量 ElemType *q = / q 为插入位置 for (p = p=q; -p) *(p+1) = *p;/ 插入位置及之后的元素右移 *q = e; / 插入 e +L.length; / 表长增 1 return OK; / ListInsert_Sq算法 2.5Status ListDelete_Sq(SqList if (iL.length) return ERROR;

3、 / i 值不合法 p = / p 为被删除元素的位置 e = *p; / 被删除元素的值赋给 e q = L.elem+L.length-1; / 表尾元素的位置 for (+p; pnext;int j = 1; / 初始化,p 指向第一个结点,j 为计数器 while (p +j; if ( !p | ji ) return ERROR; / 第 i 个元素不存在 e = p-data; / 取第 i 个元素 return OK; / GetElem_L算法 2.9Status ListInsert_L(LinkList p = L; int j = 0;while (p +j; if

4、(!p | j i-1) return ERROR; / i 小于 1 或者大于表长 s = (LinkList)malloc(sizeof(LNode); / 生成新结点 s-data = e; s-next = p-next; / 插入 L 中 p-next = s; return OK; / LinstInsert_L算法 2.10Status ListDelete_L(LinkList p = L;5int j = 0;while (p-next +j; if (!(p-next) | j i-1) return ERROR; / 删除位置不合理 q = p-next;p-next =

5、 q-next; / 删除并释放结点 e = q-data; free(q); return OK; / ListDelete_L算法 2.11void CreateList_L(LinkList int i; L = (LinkList)malloc(sizeof(LNode);L-next = NULL; / 先建立一个带头结点的单链表 for (i=n; i0; -i) p = (LinkList)malloc(sizeof(LNode); / 生成新结点 p-data = random(200); / 改为一个随机生成的数字(200 以内) p-next = L-next; L-nex

6、t = p; / 插入到表头 / CreateList_L算法 2.12void MergeList_L(LinkList pa = La-next; pb = Lb-next;Lc = pc = La; / 用 La 的头结点作为 Lc 的头结点 while (pa pc = pa; pa = pa-next; else pc-next = pb; pc = pb; pb = pb-next; pc-next = pa ? pa : pb; / 插入剩余段 free(Lb); / 释放 Lb 的头结点6 / MergeList_L算法 2.13int LocateElem_SL(SLinkL

7、ist S, ElemType e) / 在静态单链线性表 L 中查找第 1 个值为 e 的元素。 / 若找到,则返回它在 L 中的位序,否则返回 0。 int i;i = S0.cur; / i 指示表中第一个结点 while (i / 在表中顺链查找 return i; / LocateElem_SL算法 2.14void InitSpace_SL(SLinkList space) / 将一维数组 space 中各分量链成一个备用链表,space0.cur 为头指针, / “0“表示空指针 for (int i=0; inext;int j = 1; / 初始化,p 指向第一个结点,j 为

8、计数器 while (p!=va +j; if (p=va s-prior = p-prior; p-prior-next = s; s-next = p; p-prior = s; return OK; / ListInsert_DuL DuLinkList GetElemP_DuL(DuLinkList va, int i) / L 为带头结点的单链表的头指针。 / 当第 i 个元素存在时,其值赋给 e 并返回 OK,否则返回 ERROR DuLinkList p; p = va-next;int j = 1; / 初始化,p 指向第一个结点,j 为计数器 while (p!=va +j;

9、 if (p=va | jdata; p-prior-next = p-next; p-next-prior = p-prior; free(p); return OK; / ListDelete_DuL算法 2. 20Status ListInsert_L(NLinkList L, int i, ElemType e) / 算法 2.20 / 在带头结点的单链线性表 L 的第 i 个元素之前插入元素 e NLink h,s; if (!LocatePos(L, i-1, h)return ERROR; / i 值不合法 if (!MakeNode(s, e)return ERROR; / 结

10、点存储分配失败 InsFirst(h, s); / 对于从第 i 结点开始的链表,第 i-1 结点是它的头结点 return OK; / ListInsert_LStatus MergeList_L(NLinkList Position pa, pb, q; ElemType a, b;if (!InitList(Lc) return ERROR; / 存储空间分配失败 ha = GetHead(La); / ha 和 hb 分别指向 La 和 Lb 的头结点 hb = GetHead(Lb);pa = NextPos(La, ha); / pa 和 pb 分别指向 La 和 Lb 中当前结点

11、 pb = NextPos(Lb, hb);while (pa / a 和 b 为两表中当前比较元素 b = GetCurElem(pb);if (*compare)(a, b)=b.expn) return 1; else return 0; 算法 2. 22void CreatPolyn(PLinkList PElemType e; int i; InitList(P); h = GetHead(P); e.coef = 0.0; e.expn = -1;SetCurElem(h, e); / 设置头结点 for (i=1; inext; while (q) if (fabs(q-data

12、.coef) 0.005) if (i0) if (q-data.coef0.005) printf(“ + “); else printf(“ - “); printf(“%.2f“, fabs(q-data.coef); else printf(“%.2f“, q-data.coef); if (q-data.expn=1) printf(“x“);11if (q-data.expn1) printf(“%d“, q-data.expn); q=q-next; if (+i % 6 = 0) printf(“n “); printf(“n“); return OK; int Compare

13、(PElemType a, PElemType b) if (a.expnb.expn) return 1; return 0; 算法 2. 23void AddPolyn(PLinkList PElemType a, b, temp; float sum;ha = GetHead(Pa); / ha 和 hb 分别指向 Pa 和 Pb 的头结点 hb = GetHead(Pb);qa = NextPos(Pa,ha); / qa 和 qb 分别指向 La 和 Lb 中当前结点 qb = NextPos(Pb,hb);while (qa / a 和 b 为两表中当前比较元素 b = GetCu

14、rElem (qb); switch (Compare(a,b) case -1: / 多项式 PA 中当前结点的指数值小 ha = qa; qa = NextPos (Pa, qa); break;case 0: / 两者的指数值相等 sum = a.coef + b.coef ;if (sum != 0.0) / 修改多项式 PA 中当前结点的系数值 temp.coef=sum; temp.expn=a.expn; SetCurElem(qa, temp) ; ha = qa; else / 删除多项式 PA 中当前结点 DelFirst(ha, qa);12FreeNode(qa); DelFirst(hb, qb); FreeNode(qb); qb = NextPos(Pb, hb); qa = NextPos(Pa, ha); break;case 1: / 多项式 PB 中当前结点的指数值小 DelFirst(hb, qb); InsFirst(ha, qb); qb = NextPos(Pb, hb); ha = NextPos(Pa, ha); break; / switch / whileif (!Empty(Pb) Append(Pa, qb); / 链接 Pb 中剩余结点 FreeNode(h

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号