#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;
}
顺序表
最新推荐文章于 2024-04-18 21:36:09 发布