第三周项目四 顺序表应用(2)

2024-03-15 11:59
文章标签 应用 项目 顺序 第三周

本文主要是介绍第三周项目四 顺序表应用(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*   * Copyright (c) 2015, 烟台大学计算机与控制工程学院   * All rights reserved.   * 文件名称:main.cpp,list.cpp,list.h   * 作者:王雪洁  * 完成日期:2015年9月 * 版本号:vc++6.0   *   * 问题描述:将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。* 输入描述:无   * 程序输出:排序后的结果   */ 

list.h

<span style="font-size:14px;">#ifndef LIST_H_INCLUDED  
#define LIST_H_INCLUDED  #define MaxSize 50  
typedef int ElemType;  
typedef struct  
{  ElemType data[MaxSize];  int length;  
} SqList;  
void move(SqList *&L);//移动结束后,奇数居左,偶数居右  
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);//求某个数据元素值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</span><span style="font-size:18px;"> </span><span style="font-size:14px;"> </span>

list.cpp

<span style="font-size:14px;">#include <stdio.h>  
#include <malloc.h>  
#include "list.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;  }  }   //待循环上去后,继续查找,并在必要时交换  
}  //用数组创建线性表  
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");  
}  //求某个数据元素值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  
}  </span>

main.cpp

<span style="font-size:14px;">#include "list.h"  
#include <stdio.h>  //用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;  
}  </span>

运行结果:


学习心得:

      只有坚持不懈才能看到努力后的成果。

这篇关于第三周项目四 顺序表应用(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/811913

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/