第三周 【项目4- 顺序表应用】
来源:互联网 发布:淘宝网廷长收货 编辑:程序博客网 时间:2024/06/08 16:53
/*
二、list.cpp
三、main.cpp
测试截图:
测试截图:
*Copyright (c)2017,烟台大学计算机与控制工程学院
*All rights reservrd.
*作者:赵楷文
*完成时间:2017年11月09日
*版本号:v1.0
*问题描述:定义一个采用顺序结构存储的线性表,设计算法完成下面的工作:
1、删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1);
2、将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。
一、list.h
#ifndef LIST_H_INCLUDED#define LIST_H_INCLUDED#define MaxSize 50typedef int ElemType;typedef struct{ ElemType data[MaxSize]; int length;} SqList;void CreateList(SqList *&L, ElemType a[], int n);//ÓÃÊý×é´´½¨ÏßÐÔ±ívoid InitList(SqList *&L);//³õʼ»¯ÏßÐÔ±íInitList(L)void DestroyList(SqList *&L);//Ïú»ÙÏßÐÔ±íDestroyList(L)bool ListEmpty(SqList *L);//Åж¨ÊÇ·ñΪ¿Õ±íListEmpty(L)int ListLength(SqList *L);//ÇóÏßÐÔ±íµÄ³¤¶ÈListLength(L)void DispList(SqList *L);//Êä³öÏßÐÔ±íDispList(L)bool GetElem(SqList *L,int i,ElemType &e);//Çóij¸öÊý¾ÝÔªËØÖµGetElem(L,i,e)int LocateElem(SqList *L, ElemType e);//°´ÔªËØÖµ²éÕÒLocateElem(L,e)bool ListInsert(SqList *&L,int i,ElemType e);//²åÈëÊý¾ÝÔªËØListInsert(L,i,e)bool ListDelete(SqList *&L,int i,ElemType &e);//ɾ³ýÊý¾ÝÔªËØListDelete(L,i,e)#endif // LIST_H_INCLUDED#endif
二、list.cpp
#include <stdio.h>#include <malloc.h>#include "list.h"//ÓÃÊý×é´´½¨ÏßÐÔ±í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;}//³õʼ»¯ÏßÐÔ±íInitList(L)void InitList(SqList *&L) //ÒýÓÃÐÍÖ¸Õë{ L=(SqList *)malloc(sizeof(SqList)); //·ÖÅä´æ·ÅÏßÐÔ±íµÄ¿Õ¼ä L->length=0;}//Ïú»ÙÏßÐÔ±íDestroyList(L)void DestroyList(SqList *&L){ free(L);}//Åж¨ÊÇ·ñΪ¿Õ±íListEmpty(L)bool ListEmpty(SqList *L){ return(L->length==0);}//ÇóÏßÐÔ±íµÄ³¤¶ÈListLength(L)int ListLength(SqList *L){ return(L->length);}//Êä³öÏßÐÔ±í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");}//Çóij¸öÊý¾ÝÔªËØÖµ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;}//²åÈëÊý¾ÝÔªËØListInsert(L,i,e)bool ListInsert(SqList *&L,int i,ElemType e){ int j; if (i<1 || i>L->length+1) return false; //²ÎÊý´íÎóʱ·µ»Øfalse i--; //½«Ë³Ðò±íÂß¼ÐòºÅת»¯ÎªÎïÀíÐòºÅ for (j=L->length; j>i; j--) //½«data[i..n]ÔªËغóÒÆÒ»¸öλÖà L->data[j]=L->data[j-1]; L->data[i]=e; //²åÈëÔªËØe L->length++; //˳Ðò±í³¤¶ÈÔö1 return true; //³É¹¦²åÈë·µ»Øtrue}//ɾ³ýÊý¾ÝÔªËØ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}
三、main.cpp
1.删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1);
#include "list.h"#include <stdio.h>//删除线性表中,元素值在x到y之间的元素void delx2y(SqList *&L, ElemType x, ElemType y){ int k=0,i; //k记录非x的元素个数 ElemType t; if(x>y) { t=x; x=y; y=t; } for (i=0; i<L->length; i++) if (L->data[i]<x || L->data[i]>y ) //复制不在[x, y]之间的元素 { L->data[k]=L->data[i]; k++; } L->length=k;}//用main写测试代码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;}
测试截图:
2.将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。
#include "list.h"#include <stdio.h>//移动结束后,奇数居左,偶数居右void move(SqList *&L){ int i=0,j=L->length-1; ElemType tmp; while (i<j) { while ((i<j) && (L->data[j]%2==0)) //从右往左,找到第一个奇数(偶数就忽略不管) j--; while ((i<j) && (L->data[i]%2==1)) //从左往右,找到第一个偶数(奇数就忽略不管) i++; if (i<j) //如果未到达“分界线”,将右边的奇数和左边的偶数交换 { tmp=L->data[i]; L->data[i]=L->data[j]; L->data[j]=tmp; } } //待循环上去后,继续查找,并在必要时交换}//用main写测试代码int main(){ SqList *sq; ElemType a[10]= {5,8,7,0,2,4,9,6,7,3}; CreateList(sq, a, 10); printf("操作前 "); DispList(sq); move(sq); printf("操作后 "); DispList(sq); return 0;}
测试截图:
阅读全文
0 0
- 第三周 项目4-顺序表应用
- 第三周-项目4 - 顺序表应用
- 第三周项目4 - 顺序表应用
- 第三周项目4顺序表应用
- 第三周项目4顺序表应用
- 第三周项目4 顺序表应用
- 第三周项目4--顺序表应用
- 第三周 项目4-顺序表应用
- 第三周项目4 - 顺序表应用
- 第三周项目4-顺序表应用
- 第三周 项目4 -顺序表应用
- 第三周 项目4 顺序表应用
- 第三周项目-4顺序表应用
- 第三周项目4-顺序表应用
- 第三周项目4-顺序表应用
- 第三周项目4-顺序表应用
- 第三周项目4 顺序表应用
- 第三周项目4 -顺序表应用
- Java如何将处理完异常之后的程序能够从抛出异常的地点向下执行?
- 清理Ubuntu系统的缓存、垃圾、多余内核
- centos7 利用firewalld自建NAT网关
- 递归是怎么一步步实现的
- netty系列2-Linux网络IO模型
- 第三周 【项目4- 顺序表应用】
- Lesson5 接口2
- Software Testing Automation Tips.pdf 英文原版 免费下载
- CentOS6.5在VMware中的详细安装步骤(附VM12与Centos6.5下载)
- hdu5969-贪心&思维&证明-最大的异或
- 软件工程(C编码实践篇)学习总结
- SSL2846 2017年11月9日提高组T1 质数(线性筛)
- 道德的大棒·《乖摸摸头》·四
- JZOJsenior2256.【ZJOI2008】树的统计