顺序表

顺序表:线性数据元素存储到一个连续的存储空间中,比如数组

顺序表的实现
“sqList.h”

#ifndef SQLIST_H_
#define SQLIST_H_
#include <stdio.h>
#define MAX 1024

typedef struct
{
    int data[MAX];
    int last;// 含有数组元素个数的下标,比如数组
}sqList,*sqLink;


void CreateList(sqLink L);  // 创建空表
int EmptyList(sqLink L);    // 判空表
void ClearList(sqLink L);   //置空表
int GetList(sqLink L, int no);  // 取表元素(根据no)
int InsertList(sqLink L, int data, int no); // 插入元素
int DelList(sqLink L, int no);  // 删除元素(根据no)
int LocateList(sqLink L, int data); // 定位元素
void PrintList(sqLink L);   // 打印表数据
int LengthList(sqLink L);   // 求取表长度
#endif;

“sqList.cpp”

#include "sqList.h"

// 创建空表,
void CreateList(sqLink L)
{
    int temp = 1;
    int tempdata = 0;
    do
    {
        printf("请输入第%d个元素:", tempdata);
        scanf("%d", &tempdata);
        if (tempdata != -1)
        {
            L->data[temp-1] = tempdata;
            L->last = temp - 1;
            temp++;
        }
    }while(temp <= MAX && tempdata!= -1);
}

// 判空表
int EmptyList(sqLink L) 
{
    if (L->last == -1)
        return -1;
    else
        return 0;
}

//置空表
void ClearList(sqLink L)    
{
    L->last = -1;
}

// 取表元素(根据noint GetList(sqLink L, int no)   
{
    if (no < 0 || no >= L->last+1)
        return -1;

    return L->data[no-1];
}

// 打印表数据
void PrintList(sqLink L)
{
    int i;
    for (i = 0; i < LengthList(L); i++)
    {
        printf("%d ", L->data[i]);
    }
    printf("\n");
}

// 求取表长度
int LengthList(sqLink L)
{
    return L->last+1;
}

int InsertList(sqLink L, int data, int no)  // 插入元素
{
    int j;
    if (L->last >= MAX-1)
    {
        printf("没有空闲空间!\n");
        return -1;
    }
    else if (no < 0 || no > L->last +1)
    {
        printf("插入位置不存在!\n");
        return -1;
    }else{
        for (j = L->last; j >= no; j--)
        {
            L->data[j+1] = L->data[j];
        }

        L->data[no] = data;
        L->last++;
        return 0;
    }

    return 0;
}

// 删除元素(根据noint DelList(sqLink L, int no)   
{
    int j;
    if (no < 0 || no > L->last+1) 
    {
        printf("删除位置不存在!\n");
        return -1;
    }
    else
    {
        for (j = no+1; j <= L->last+1; j++)
        {
            L->data[j-1] = L->data[j];
        }
        L->last--;
        return 0;
    }
}

// 定位元素,第一个为data数据
int LocateList(sqLink L, int data)  
{
    int i = 0;
    while (i <= L->last && L->data[i] != data)
        i++;
    if (i <= L->last) return (i);
    else
        return -1;
}

“main.cpp”

int main()
{
    sqLink L = (sqLink)malloc(sizeof(sqList));
    CreateList(L);
    PrintList(L);
    return 0;
}

线性表的顺序存储结构有存储密度高及能够随机存取等优点,但存在不足:
1.插入、删除等运算耗时,且存在元素在存储器中成片移动的现象
2.要求系统提供一片较大的连续存储空间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值