顺序表

#include <stdio.h>
#include <malloc.h>

/***
 *顺序查找
 * 在顺序表(22,34,25,12,35,67,7,45)中查找定值为25的数据元素
 */

#define MAXLEN 100
#define ElemType char   //顺序表中元素的类型

typedef struct
{
    ElemType data[MAXLEN];
    int last;   //最后一个元素的位置
}SequenList;

//顺序表置空
SequenList * setSqLNull()
{
    SequenList * L;
    L = (SequenList *)malloc(sizeof(SequenList));
    L->last = 0;
    return L;
}

//由数组输入元素
void ArrayInput(SequenList * L,ElemType a[],int n)
{
    int i;
    for(i = 0;i < n; i++)
      L->data[i] = a[i];
    L->last = n;
}

//由键盘输入元素
void KeyboardInput(SequenList * L)
{
    int i,n;
    printf("\n请输入元素个数:");
    scanf("%d", &n);
    printf("\n请输入%d个元素:\n",n);
    for(i=0; i<n; i++)
      scanf("%d", &L->data[i]);
    L->last = n;
}

//顺序表求表长
int SqLlength(SequenList * L)
{
    return L->last;
}

//顺序表按序号取元素
ElemType SqLget(SequenList * L, int i)
{
    if (i > SqLlength(L) || i < 0)
        printf("error");
    else
        return L->data[i-1];
}

//顺序表按值查找   输出该值在顺序表中的位置
void SqLlocate(SequenList * L, ElemType ch)
{
    int i;
    int flag = 0;
    for (i = 0; i < SqLlength(L); ++i)
        if (L->data[i] == ch)
        {
            printf("%c在顺序表中的位置为%d\n", ch, i + 1);
            flag = 1;
        }

    if (0 == flag)
        printf("该顺序表中不存在%c\n", ch);
}

//顺序表判表满
int SqLfull(SequenList * L)
{
    if (L->last >= MAXLEN)
        return 1;
    else
        return 0;
}

//顺序表插入数据元素
void SqLinsert(SequenList * L, int n, ElemType ch)
{
    int i;
    if (SqLfull(L))
        printf("over flow\n");
    else if (n < 0 || n > SqLlength(L) + 1)
        printf("error\n");
    else
    {
        for(i = L->last; i >= n-1; i--)
            L->data[i+1] = L->data[i];
        L->data[n-1] = ch;
        L->last++;
     }
}

//顺序表删除数据元素的算法
void SqLdelete(SequenList * L, int i)
{
    int j;
    if (L->last < 0)
        printf("error : Sqldelete  list is null");
    else if (i < 0 || i > L->last + 1)
        printf("error : SqLdelete");
    else
    {
        for (j = i - 1; j <= L->last; ++j)
        {
            L->data[j] = L->data[j+1];
        }
        L->last--;
    }
}

//顺序表逆置 Inverse
void SqLinverse(SequenList * L)
{
    int i, j;
    ElemType temp;

    for (i = 0, j = L->last-1; i < j; i++, j--)
    {
        temp = L->data[i];
        L->data[i] = L->data[j];
        L->data[j] = temp;
    }
}

//输出顺序表
void print(SequenList * L)
{
    int i;
    for (i = 1; i <= SqLlength(L); ++i)
    {
        printf("%c  ", SqLget(L, i));
    }
    printf("\n");
}

int main(void)
{
    int i;
    ElemType ch = 'A';
    SequenList * L = setSqLNull();

    for (i = 1; i <= 26; ++i, ch++)
    {
        SqLinsert(L, i, ch);
    }

    //printf("插入26个字母\n");
    print(L);

    SqLdelete(L, 1);
    SqLdelete(L, 1);
    SqLdelete(L, 24);

    //printf("删除了三个字母后:\n");
   print(L);

    SqLinverse(L);

    //printf("逆置后:\n");
    print(L);

    return 0;
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值