数据结构——线性表的操作

版权声明:莉莉莉 https://blog.csdn.net/qq_41700151/article/details/83546153

终于学会了线性表的代码,记录下来

1.线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素。
2.采用的实现方式:一段地址连续的存储单元可以用固定数组或者动态存储结构来实现,这里采用动态分配存储结构。
在这里插入图片描述

代码:

#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1

#define INIT_SIZE 5     /*初始分配的顺序表长度*/
#define INCREM 5        /*溢出时,顺序表长度的增量*/
using namespace std;
typedef  int ElemType;  /*定义表元素的类型*/
typedef struct Sqlist
{
    ElemType *slist;      /*存储空间的基地址*/
    int length;           /*顺序表的当前长度 存储的是线性表里元素的个数*/  
    int listsize;         /*当前分配的存储空间*/
} Sqlist;

int InitList_sq(Sqlist *L); /*                             */
int CreateList_sq(Sqlist *L,int n); /*                     */
int ListInsert_sq(Sqlist *L,int i,ElemType e);/*                 */
int PrintList_sq(Sqlist *L);  /*输出顺序表的元素*/
int ListDelete_sq(Sqlist *L,int i); /*删除第i个元素*/
int ListLocate(Sqlist *L,ElemType e); /*查找值为e的元素*/

int InitList_sq(Sqlist *L)
{
    L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));
    if(!L->slist)
        return ERROR;
    L->length=0;
    L->listsize=INIT_SIZE;
    return OK;
}/*InitList*/

int CreateList_sq(Sqlist *L,int n)
{
    ElemType e;
    int i;
    for(i=0; i<n; i++)
    {
        printf("input data %d:",i+1);
        scanf("%d",&e);
        if(!ListInsert_sq(L,i+1,e))
            return ERROR;
    }
    return OK;
}/*CreateList*/

/*输出顺序表中的元素*/
int PrintList_sq(Sqlist *L)
{
    int i;
    for(i=1; i<=L->length; i++)
        printf("%5d",L->slist[i-1]);
    return OK;
}/*PrintList*/

int ListInsert_sq(Sqlist *L,int i,ElemType e)
{
    int k;
    if(i<1||i>L->length+1)
        return ERROR;
    if(L->length>=L->listsize)
    {
        L->slist=(ElemType*)realloc(L->slist,
                                    (INIT_SIZE+INCREM)*sizeof(ElemType));
        if(!L->slist)
            return ERROR;
        L->listsize+=INCREM;
    }
    for(k=L->length-1; k>=i-1; k--)
    {
        L->slist[k+1]= L->slist[k];
    }
    L->slist[i-1]=e;
    L->length++;
    return OK;
}/*ListInsert*/

/*在顺序表中删除第i个元素*/
int ListDelete_sq(Sqlist *L,int i)
{
    int j;
    if(i<1||i>L->length)
        return ERROR;
    for(j=i;j<L->length;j++)
        L->slist[j-1]=L->slist[j];
    L->length--;
    return i;


}
/*在顺序表中查找指定值元素,返回其序号*/
int ListLocate(Sqlist *L,ElemType e)
{
     int i=1;
     ElemType *p=L->slist;    //*p即为线性表里存储的值
     while(i<=L->length&&(*p++)!=e)
        ++i;
    if(i<=L->length)
        return i;
    else
        return 0;

}

int main()
{
    Sqlist sl;
    int n,m,k;
    printf("please input n:");  /*输入顺序表的元素个数*/
    scanf("%d",&n);
    if(n>0)
    {
        printf("\n1-Create Sqlist:\n");
        InitList_sq(&sl);
        CreateList_sq(&sl,n);
        printf("\n2-Print Sqlist:\n");
        PrintList_sq(&sl);
        printf("\nplease input insert location and data:(location,data)\n");
        scanf("%d %d",&m,&k);
        ListInsert_sq(&sl,m,k);
        printf("\n3-Print Sqlist:\n");
        PrintList_sq(&sl);
        printf("\n");
        printf("\n4-ListDelete Sqlist:\n");
        int p;
        scanf("%d",&p);
        ListDelete_sq(&sl,p);
        printf("\n5-Print Sqlist:\n");
        PrintList_sq(&sl);
        printf("\n");
        printf("\n6-ListLocate Sqlist:\n");
        scanf("%d",&p);
        int ans=ListLocate(&sl,p);
        if(ans==0)
            printf("Not found\n");
        else
            printf("Found,it's number is %d",ans);

    }
    else
        printf("ERROR");
    return 0;
}

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41700151/article/details/83546153