顺序表

2017-11-04  本文已影响8人  我想做个程序员
#include <iostream>
using namespace std;

#define MaxSize 50

typedef int ElemType;

typedef struct
{
    ElemType data[MaxSize];
    int length;
}SqList;

/**创建顺序表**/
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;
}
/**初始化顺序表**/
void InitList(SqList* &L)
{
    L=(SqList *)malloc(sizeof(SqList));
    L->length=0;
}
/**销毁线性表**/
void DestroyList(SqList* &L)
{
    free(L);
}
/**判断线性表是否是空表**/
bool ListEmpty(SqList *L)
{
    return (L->length==0);
}
/**求线性表的长度**/
int ListLength(SqList *L)
{
    return (L->length);
}
/**输出线性表**/
void DispList(SqList *L)
{
    int i;
    for(i=0;i<L->length;i++){
        printf("%d",L->data[i]);
    }
    printf("\n");
}
/**求线性表中的某个数据元素值**/
bool GetElem(SqList *L,int i,ElemType &e)
{
    if(i<1||i>L->length)
        return false;
    e=L->data[i-1];
    return true;
}
/**按元素查找**/
int LocateElem(SqList *L,ElemType e)
{
    int i=0;
    while(L->data[i]!=e&&i<L->length)
    {
        i++;
    }
    if(i>=L->length)
        return 0;
    else
        return i+1;
}
/**插入元素数据**/
bool ListInsert(SqList* &L,int i,ElemType e)
{
    int j;
    if(i<1||i>L->length+1)
    {
        return false;
    }
    i--;
    for(j=L->length;j<i;j--)
    {
        L->data[j]=L->data[j-1];
    }
    L->data[i]=e;
    L->length++;
    return true;
}
/**删除元素数据**/
bool ListDelete(SqList* &L,int i,ElemType &e)
{
    int j;
    if(i<1||i>L->length)
        return false;
    i--;
    e=L->data[i];
    for(j=i;j<L->length-1;j++)
        L->data[j]=L->data[j+1];
    L->length--;
    return true;
}

/**删除表中的所有x**/
void DeleteX_1(SqList* &L,ElemType e){
    int k=0,i=0;
    for(i;i<L->length;i++)
    {
        if(L->data[i]!=e){
            L->data[k]=L->data[i];
            k++;
        }
    }
    L->length=k;
}
void DeleteX_2(SqList* &L,ElemType e){
    int k=0,i=0;
    while(i<L->length){
        if(L->data[i]==e){
            k++;
        }
        else
            L->data[i-k]=L->data[i];
    }
    L->length -=k;
}
/**以第一个元素为界把大于它的放到他后面小于它的放到他前面**/
void move_1(SqList* &L)
{
    int i=0,j=L->length-1;
    int tmp;
    while(i<j)
    {
        while(i<j&&L->data[j]>L->data[0])
            j--;
        while(i<j&&L->data[i]<=L->data[0])
            i++;
        if(i<j)
        {
            tmp=L->data[i];
            L->data[i]=L->data[j];
            L->data[j]=tmp;
        }
    }
    tmp=L->data[0];
    L->data[0]=L->data[j];
    L->data[j]=tmp;
}
void move_2(SqList* &L)
{
    int i=0,j=L->length-1;
    int pivot = L->data[0];
    while(i<j)
    {
        while(i<j&&L->data[j]>pivot)
            j--;
        L->data[i]=L->data[j];
        i++;
        while(i<j&&L-data[i]>=pivot)
            i++;
        L-data[j]=L-data[i];
        j--;
    }
    L-data[i]=pivot;

}
int main(){
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读