第三周项目四 顺序表应用(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

相关文章

Golang实现基于角色的访问控制(RBAC)的项目实践

《Golang实现基于角色的访问控制(RBAC)的项目实践》基于角色的访问控制(RBAC)是一种安全机制,通过角色来管理用户权限,本文介绍了一种可落地、易扩展的GolangRBAC实现方案,具有一定... 目录一、RBAC 核心模型设计二、RBAC 核心逻辑实现RBAC 管理器定义基础 CRUD:添加用户

SpringBoot项目jar依赖问题报错解析

《SpringBoot项目jar依赖问题报错解析》本文主要介绍了SpringBoot项目中常见的依赖错误类型、报错内容及解决方法,依赖冲突包括类找不到、方法找不到、类型转换异常等,本文给大家介绍的非常... 目录常见依赖错误类型及报错内容1. 依赖冲突类错误(1) ClassNotFoundExceptio

PyTorch核心方法之state_dict()、parameters()参数打印与应用案例

《PyTorch核心方法之state_dict()、parameters()参数打印与应用案例》PyTorch是一个流行的开源深度学习框架,提供了灵活且高效的方式来训练和部署神经网络,这篇文章主要介绍... 目录前言模型案例A. state_dict()方法验证B. parameters()C. 模型结构冻

springboot控制bean的创建顺序

《springboot控制bean的创建顺序》本文主要介绍了spring-boot控制bean的创建顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1、order注解(不一定有效)2、dependsOn注解(有效)3、提前将bean注册为Bea

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

线程池ThreadPoolExecutor应用过程

《线程池ThreadPoolExecutor应用过程》:本文主要介绍如何使用ThreadPoolExecutor创建线程池,包括其构造方法、常用方法、参数校验以及如何选择合适的拒绝策略,文章还讨论... 目录ThreadPoolExecutor构造说明及常用方法为什么强制要求使用ThreadPoolExec

mysql_mcp_server部署及应用实践案例

《mysql_mcp_server部署及应用实践案例》文章介绍了在CentOS7.5环境下部署MySQL_mcp_server的步骤,包括服务安装、配置和启动,还提供了一个基于Dify工作流的应用案例... 目录mysql_mcp_server部署及应用案例1. 服务安装1.1. 下载源码1.2. 创建独立

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加