顺序表

来源:互联网 发布:linux rpm文件 编辑:程序博客网 时间:2024/06/08 00:22
#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--;    }}//顺序表逆置 Inversevoid 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;}

这里写图片描述

1 0
原创粉丝点击