概念
使用顺序结构存储的线性表
实现
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#define SIZE 100
typedef int ElementType;
//数组结构
typedef struct array
{
ElementType * data;
int current_len;
int size;
}Array;
//数组结构指针
typedef Array * SeqList;
//初始化
void Initialize(SeqList L)
{
L->data = (ElementType *)malloc(sizeof(ElementType)*SIZE);
if (L->data == NULL)
{
printf("Memory allocation failed\n");
exit(1);
}
L->current_len = 0;
L->size = SIZE;
}
//判断顺序表是否为空
bool IsEmpty(SeqList L)
{
if (L->current_len == 0)
return true;
else
return false;
}
//判断顺序表是否为满
bool IsFull(SeqList L)
{
if (L->size == L->current_len)
return true;
else
return false;
}
//插入数据
bool Insert(SeqList L,ElementType item,int i)
{
int j;
if (IsFull(L))
{
puts("List is Full.");
return false;
}
if (i<1 || i>L->current_len+1)
{
puts("Insert position Unreasonable.");
return false;
}
for (j = L->current_len - 1;j >= i-1; j--)
{
L->data[j+1] = L->data[j];
}
L->data[i-1] = item;
L->current_len++;
return true;
}
//删除数据
bool Delete(SeqList L, int i)
{
if (IsEmpty(L))
{
puts("List is Empty.");
return false;
}
if (i<1 || i > L->current_len + 1)
{
puts("Delete position is wrong.");
return false;
}
int j;
for(j = i;j <= L->current_len - 1;j++)
L->data[j-1] = L->data[j];
L->current_len--;
return true;
}
//显示顺序表数据
void Traverse(SeqList L)
{
int i;
puts("The Array element is:");
for (i = 0; i < L->current_len; i++)
printf("%d ",L->data[i]);
printf("\n");
}
//测试
int main(void)
{
Array arr;
Initialize(&arr);
int i;
ElementType item;
puts("Enter five elem:");
for(i = 1;i <=5;i++)
{
scanf("%d",&item);
Insert(&arr,item,i);
}
Traverse(&arr);
Delete(&arr,3);
Traverse(&arr);
return 0;
}
网友评论