线性表【项目4 线性表

<span style="font-size:12px;"></span><p><span style="font-size:12px;color:#3333ff;BACKGROUND-COLOR: #ffff99">/*  *线性表【项目4 线性表– 顺序表应用】之二<img alt="吐舌头" src="" /><img alt="吐舌头" src="" /><img alt="吐舌头" src="" />  *Copyright (c) 2015 烟台大学计算机与控制工程学院  *All right reserved.  *文件名称:xianxingbiao.cpp  *标题:数据结构实践——顺序表应用  *分类:数据结构  顺序表应用   *writer:罗海员</span></p><p><span style="font-size:12px;color:#3333ff;BACKGROUND-COLOR: #ffff99">  *date:2015年9月15日  *版本:V1.0.1  *操作系统:XP  *运行环境:VC6.0  *问题描述:定义一个采用顺序结构存储的线性表,设计算法完成下面的工作:           1、删除元素在[x, y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1);           2、将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。</span></p><p><span style="font-size:12px;color:#3333ff;BACKGROUND-COLOR: #ffff99">   提示:        1.充分利用前面建立的算法库解决建立顺序表、输出线性表的问题;         2.复杂度的要求,设计算法并用专门的函数实现算法;         3.理论与实践相结合  *输入描述:(如下图)</span></p><p><span style="font-size:12px;color:#3333ff;BACKGROUND-COLOR: #ffff99">  *算法库包括两个文件:     头文件:list.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;     源文件:list.cpp,包含实现各种算法的函数的定义和测试代码main函数   *程序输出:(如下图)*/</span></p><span style="font-size:12px;"></span> <span style="font-size:12px;"></span> <span style="font-size:12px;">//之二//2.将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1)。//main测试函数#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;}</span>

<span style="font-size:12px;">//函数库,各种线性表的实现#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}</span>孤单不是与生俱来,而是由你爱上一个人的那一刻开始。

线性表【项目4 线性表

相关文章:

你感兴趣的文章:

标签云: