顺序表的基本运算

建立顺序表运算的算法库,参考代码见教科书。
算法库包括两个文件:
头文件:list.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;
源文件:list.cpp,包含实现各种算法的函数的定义;
请采用程序的多文件组织形式,建立如上的两个文件,另外再建立一个源文件,编写main函数,完成相关的测试工作:
为了简单,ElemType为int型
1.初始化一个顺序表;
2.依次插入多个元素;
3.输出顺序表;
4.输出顺序表的长度;
5.判断顺序表是否为空;
6.输出顺序表第4个元素;
7.输出一个指定元素的位置;
8.在指定的位置插入一个元素;
9.输出顺序表;
10.释放顺序表。

list.h

#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
#include<stdlib.h>
#include<cstdio>
#include<iostream>
#define Max 50
typedef struct
{
        int date[Max];
        int length;
}Sqlist;
void CreatList(Sqlist *&L,int a[],int n);
void PrintList(Sqlist *L);
bool ListEmpty(Sqlist *L);
int  PrintX(Sqlist *L,int x);
bool InsertInt(Sqlist *&L,int i,int num);
void ListFree(Sqlist *&L);
bool Delected(Sqlist *&L,int x,int y);
void QuickSort(Sqlist *&L);
#endif // LIST_H_INCLUDED

list.cpp

#include"list.h"

//将数组导入下顺序表
void CreatList(Sqlist *&L,int a[],int n)
{
        int i=0,k=0;
        L=(Sqlist *)malloc(sizeof(Sqlist));
        while (i<n)
        {
                L->date[k]=a[i];
                k++;i++;
        }
        L->length=k;
}

//打印顺序表
void PrintList(Sqlist *L)
{
        for(int i=0;i<L->length;i++)
                printf("%d ",L->date[i]);
        printf("顺序表长度:%d\n",L->length);
}

//是否为空
bool ListEmpty(Sqlist *L)
{
        return (L->length==0);
}

//指元素的位置
int  PrintX(Sqlist *L,int x)
{
    int i=0;
    while (i<L->length && L->date[i]!=x)
                i++;
    if(i>=L->length)
        return 0;
    else
        return i+1;
}

//指定位置擦插入一个元素
bool InsertInt(Sqlist *&L,int i,int num)
{
    int j;
    if( i < 1 || i >= L->length+1)
        return  false;
    i--;
    for(j=L->length;j>i;j--)
        L->date[j]=L->date[j-1];
    L->date[i]=num;
    L->length++;
        return true;
}
void ListFree(Sqlist *&L)
{
        free(L);
}
//删除[x,y]之间元素
bool Delected(Sqlist *&L,int x,int y)
{
        if(x < 1 || y > L->length )
                return false;
        x--;y--;
        int num=y-x;
        for(int i=x;i<L->length-1;i++)
        {
                L->date[i]=L->date[i+num+1];
        }
        L->length=L->length-num-1;
        return true;
}
void QuickSort(Sqlist *&L)
{
        int i=-1;
        for(int j=0;j<L->length;j++)
        {
                if(L->date[j]%2!=0)
                {
                        int x=L->date[j];L->date[j]=L->date[i+1];L->date[i+1]=x;
                        i++;
                }
        }
}

main.cpp

#include <iostream>
#include "list.h"
using namespace std;

int main()
{
        //初始化数组 来导入顺序表
        int n;
        int B[Max];
        printf("请输入数据个数:(0-50)\n");
        scanf("%d",&n);
        for(int i=0;i<n;i++)
                scanf("%d",&B[i]);

        Sqlist *A;


        CreatList(A,B,n);

        PrintList(A);

        if(ListEmpty(A))
                printf("为空\n");
        else printf("不为空\n");

        int x;
        printf("输入查看指定元素的位置:");
        scanf("%d",&x);
        printf("位置索引:%d\n",PrintX(A,x));

        printf("输入插入的索引和数值:\n");
        int insertx;
        int insertindenx;
        scanf("%d %d",&insertx,&insertindenx);
        if(InsertInt(A,insertindenx,insertx)==true)
        {
                printf("添加成功\n");
        }else printf("添加不成功");

        PrintList(A);

        int a , b;
        printf("请输入删除的x和y:");
        scanf("%d %d",&a,&b);
        if(Delected(A,a,b)==false)
        {
                printf("wrong");
        }else
        {
                printf("true");
        }

        PrintList(A);


        printf("排序完之后\n");
        QuickSort(A);
        PrintList(A);

         ListFree(A);
        return 0;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值