算法库应用——删除元素在[x, y]之间的元素
来源:互联网 发布:金盛集团网络登录平台 编辑:程序博客网 时间:2024/06/05 11:31
list.cpp
#ifndef LIST_H_INCLUDED#define LIST_H_INCLUDED/** Copyright (c) 2015, 烟台大学计算机与控制工程学院* All rights reserved.* 文件名称:main.cpp,hanshu.cpp,list.h* 作者:徐吉平* 完成日期:2015年9月20日* 版本号:code ::Block 13.12** 问题描述:删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1);* 输入描述:无* 程序输出:线性表的结果*/#include <stdio.h>#include <malloc.h>#define MaxSize 50 //Maxsize将用于后面定义存储空间的大小typedef int ElemType; //ElemType在不同场合可以根据问题的需要确定,在此取简单的inttypedef struct{ ElemType data[MaxSize]; //利用了前面MaxSize和ElemType的定义 int length;}SqList;void delx2y(SqList *&L, ElemType x, ElemType y);void InitList(SqList *&L);//初始化链表void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表bool ListInsert(SqList *&L,int i,ElemType e) ;//插入数据元素ListInsert(L,i,e)int ListLength(SqList *L);//求线性表的长度ListLength(L)bool GetElem(SqList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)bool ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)bool ListEmpty(SqList *L);//判断线性表是否为空void DispList(SqList *L);//输出线性表void DestroyList(SqList *&L);//销毁线性表DestroyList(L)#endif // LIST_H_INCLUDEDhanshu.cpp
#include "list.h"void delx2y(SqList *&L, ElemType x, ElemType y){ // ElemType a,k=0; int k=0; //k记录非x的元素个数 ElemType a; if(x>y) { a=x; x=y; y=a; } for(int i=0;i<L->length;i++) { if(L->data[i]<x||L->data[i]>y) { L->data[k]=L->data[i]; k++; } } L->length=k;}//初始化线性表InitList(L)void InitList(SqList *&L){ L=(SqList *)malloc(sizeof(SqList)); L->length=0;}//用数组创建线性表CreateList(SqList L, ElemType a, int n)void CreateList(SqList *&L, ElemType a[], int n){ int i; L=(SqList *)malloc(sizeof(SqList)); for (i=0; i<n; i++) L->data[i]=a[i]; L->length=n;}//插入数据元素ListInsert(L,i,e)bool ListInsert(SqList *&L,int i,ElemType e){ int j; if(i<1||i>L->length+1) { return false; } i--; for(j=L->length;j>i;j--) { L->data[j]=L->data[j-1]; } L->data[i]=e; L->length++; return true;}//求线性表的长度ListLength(L)int ListLength(SqList *L){ return(L->length);}//求某个数据元素值GetElem(L,i,e)bool GetElem(SqList *L,int i,ElemType &e){ if (i<1 || i>L->length) return false; e=L->data[i-1]; return true;}//按元素值查找LocateElem(L,e)int LocateElem(SqList *L, ElemType e){ int i=0; while (i<L->length && L->data[i]!=e) i++; if (i>=L->length) return 0; else return i+1;}//删除数据元素ListDelete(L,i,e)bool ListDelete(SqList *&L,int i,ElemType &e){ int j; if (i<1 || i>L->length) //参数错误时返回false return false; i--; //将顺序表逻辑序号转化为物理序号 e=L->data[i]; for (j=i; j<L->length-1; j++) //将data[i..n-1]元素前移 L->data[j]=L->data[j+1]; L->length--; //顺序表长度减1 return true; //成功删除返回true}//判定是否为空表ListEmpty(L)bool ListEmpty(SqList *L){ return (L->length==0);}//输出线性表DispList(L)void DispList(SqList *L){ int i; if(ListEmpty(L)) return ; for (i=0;i<L->length;i++) printf("%d ",L->data[i]); printf("\n");}//销毁线性表DestroyList(L)void DestroyList(SqList *&L){ free(L);}
main.cpp
#include "list.h"int main(){ SqList *sq; ElemType a[10]= {5,8,7,0,2,4,9,6,7,3}; CreateList(sq, a, 10); printf("删除前 "); DispList(sq); delx2y(sq, 4, 7); printf("删除后 "); DispList(sq); return 0;}
总结:该程序虽然简单,但在编写过程中也遇到了诸多问题,细节决定成败,一个循环过程中的i没有赋初值,可让我调试了好久
不过最终还是发现了这个低级的问题,顺利完成
细节决定成败,一定要细心啊!
0 0
- 算法库应用——删除元素在[x, y]之间的元素
- 第3周项目4-顺序表的应用(1)删除元素在[x, y]之间的所有元素
- 第三周项目4-顺序表应用1-删除元素在【X,Y】之间的所有元素
- 第三周项目4 顺序表应用(删除元素在[x,y]之间的所有元素)
- 第三周项目4顺序表应用2 删除元素在[x,y]之间的所有元素
- 顺序表中删除值在X--Y之间的元素
- 从顺序表L中删除元素x到y之间的所有元素(x<=y)
- 第三周项目4(1)-顺序表应用 删除区间【x,y】内的元素
- 第三周项目4(1)-顺序表应用 删除区间【x,y】内的元素
- Javascript—获取元素ele的位置(x,y)
- 在单链表中删除所有元素值为X的元素
- 第三周项目4-顺序表应用 删除【x,z】之间的元素
- 设计删除顺序表中【x,y】中的所有元素算法
- C#源代码—从数组x复制到数组y,将数组x的元素排序
- 获取Dom元素的X/Y坐标
- 数据结构:有人设计以下算法用于删除整数顺序表L中所有值在[x,y]范围内的元素,该算法显然不是高效的,请设计一个同样功能的高效算法。
- 顺序表——删除元素x后的的num个元素
- 数据结构—链表-单链表应用-删除元素最大的节点
- WIX:html5拖拽式建站,个人建站首选,操作方便快捷
- Bestcoders 56 Clarke and problem
- uva 10763
- Swift学习笔记基础语法-常量与变量
- 标注问题
- 算法库应用——删除元素在[x, y]之间的元素
- 06-从分片--Replica Shards--es横向扩展设计
- 《Java编程思想》学习记录仪二 -- 2.2.1 java中存储域及特点(第二章一切都是对象)
- UVa227——Puzzle
- 简易抽签程序(数字滚动 HTML + JavaScript)
- 通过node.js 安装phonegap
- String、StringBuffer与StringBuilder之间区别
- opencart之vqmod浅谈
- netbeans计算器