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

编程入门 行业动态 更新时间:2024-10-10 04:24:29

第三周项目四(2)—<a href=https://www.elefans.com/category/jswz/34/1771364.html style=顺序表的应用"/>

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

*Copyright(c)2017,烟台大学计算机与控制工程学院      
*All rights reservrd.         
*作者:刘文平      
*完成时间:2017年9月14日      
*版本号:v1.0      
*问题描述:将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。
*问题输入:给出一组数
*问题输出:见截图
list.h
#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED#define MaxSize 50
typedef int ElemType;
typedef struct
{ElemType data[MaxSize];int length;
} SqList;
void unionList(SqList *LA, SqList *LB, SqList *&LC);
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
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");
}//求某个数据元素值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;   //参数错误时返回falsei--;            //将顺序表逻辑序号转化为物理序号for (j=L->length; j>i; j--) //将data[i..n]元素后移一个位置L->data[j]=L->data[j-1];L->data[i]=e;           //插入元素eL->length++;            //顺序表长度增1return true;            //成功插入返回true
}//删除数据元素ListDelete(L,i,e)
bool ListDelete(SqList *&L,int i,ElemType &e)
{int j;if (i<1 || i>L->length)  //参数错误时返回falsereturn 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--;              //顺序表长度减1return true;              //成功删除返回true
}
mian.cpp
#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;
}
知识点总结: 线性表元素的查找及变换。学习心得:要学会使用算法库,使编码更有效率。

更多推荐

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

本文发布于:2024-02-13 18:16:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1759436.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:顺序   第三周   项目

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!