线性表


# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
# define N 100

typedef  int ElenType;

typedef  struct
{
    ElenType  date[N];
    int length;
} SqList;

SqList * CreteList(SqList * q,ElenType a[], int len);//创建表
 SqList * initList(SqList *);//初始化
void destroyList();//销毁线性表
int ListEmpty(SqList *q);//判断线性表是否为空
int ListLength(SqList *q);//返回线性表的长度
void dispList(SqList *q);//便利输出
void getList(SqList *q,int i,ElenType &e);//获取第i个元素的值,获取值保存在e中
int locateElem(SqList *q,ElenType e);   //在线性表中查找与e相等的元素,返回序数,不存在返回0;
SqList * listInsert(SqList * q,int i, ElenType e);//插入第i个元素的前面
SqList *  listDelete(SqList * q,int i, ElenType e); //删除第i个元素
int main()
{
    SqList * p;
    ElenType  a[6]={1,34,56,35,55,77};
    int s,t,t1;

    p=CreteList(p,a,6);

    //p=initList(p);

         //destroyList(&p);//不对

    //ListEmpty(p);

      //ListLength(p);

//   dispList(p);//获取此值

    //getList(p,3,t);//用t来
     //printf("%d \n",t);

     // s=locateElem(p,55);
     //printf("%d",s);

    //listInsert(p,3,36);
    //dispList(p);//获取此值

    listDelete(p,3,t1);
    dispList(p);//获取此值

    return 0;
}

SqList * CreteList(SqList *q, ElenType a[],int len)
{


     q = (SqList *)malloc(sizeof(SqList));

     for(int i=0;i<len;i++)
         q->date[i]=a[i];

     q->length=len;

       return q;

}

/*
void CreateList(SqList *&L,ElemType a[],int n)相当于void CreateList((SqList *)(&L),ElemType a[],int n)  相当于&L=p,即L引用p前面的SqList只是类型
//建立顺序表
{
    int i;
    L=(SqList *)malloc(sizeof(SqList));
    for (i=0;i<n;i++)
        L->data[i]=a[i];
    L->length=n;
}
*/

SqList *  initList(SqList *q)
{
   q=(SqList *)malloc(sizeof(SqList));

   q->length=0;

   return q;
}

/*
void InitList(SqList *&L)//初始化
{
    L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间
    L->length=0;
}
*/


/*void destroyList(SqList **q)
{
   ferr(*q);
}
*/

int ListEmpty(SqList * q)
{
    return (q->length==0);
}

int ListLength(SqList * q)
{
     return (q->length);
}

void dispList(SqList * q)
{
    for(int i=0;i<q->length;i++)
    printf("%d ",q->date[i]);

}

void getList(SqList * q,int i,ElenType &e)
{
    if(i<1||i>q->length)
    {
        printf("输入错误,没有此元素\n");
         exit(-1);
    }
    e=q->date[i-1];
}
/*

int GetElem(SqList *L,int i, &e)
{
    if (i<1 || i>L->length)
        return 0;
    e=L->data[i-1];
    return 1;
}
*/

int locateElem(SqList * q,ElenType e)
{
    for(int i=0;i<q->length;i++)

         if(q->date[i]==e)
             return i+1;

             return 0;

}

/*
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;
}

*/

SqList * listInsert(SqList *q,int i,ElenType e)
{
    if(i<1||i>q->length)
    {
        printf("元素的位置错误!");
exit(-1);
    }
    else
        for(int j=q->length;j>=i;j--)
            q->date[j]=q->date[j-1];

        q->date[i-1]=e;

        q->length++;

        return q;
}

/*
int ListInsert(SqList *&L,int i,ElemType e)
{
    int j;
    if (i<1 || i>L->length+1)
        return 0;
    i--;                        //将顺序表位序转化为elem下标
    for (j=L->length;j>i;j--)   //将data[i]及后面元素后移一个位置
        L->data[j]=L->data[j-1];
    L->data[i]=e;
    L->length++;                //顺序表长度增1
    return 1;

*/

    SqList * listDelete(SqList * q,int i,ElenType e)
    {
        if(i<1||i>q->date[q->length-1])
        {
            printf("输入错误!\n");
           exit(-1);
        }
        else
        {
            e = q->date[i-1];
            for(int j=i;j<q->length;j++)

                q->date[j-1]=q->date[j];

            q->length--;


        }

        return q;
    }

    /*
int ListDelete(SqList *&L,int i,ElemType &e)
{
    int j;
    if (i<1 || i>L->length)
        return 0;
    i--;                        //将顺序表位序转化为elem下标
    e=L->data[i];
    for (j=i;j<L->length-1;j++) //将data[i]之后的元素前移一个位置
        L->data[j]=L->data[j+1];
    L->length--;                //顺序表长度减1
    return 1;
}



    */

你可能感兴趣的:(struct,线性表,typedef)