线性表的实现
顺序表存储
– 定义的结构体如下
//定义一个线性链表的结构体
struct LNode{
int data[100];
int Last;
};
typedef struct LNode* List;
typedef struct LNode LNode;
- 各方法的实现
//建立空的顺序表
List MakeEmpty(){
List PtrL;
PtrL = (List)malloc(sizeof(LNode));
PtrL->Last=-1;
return PtrL;
}
//对一个线性链表进行初始化
void IniList(List L){
int n;
scanf("%d",&n);
while(n!=-1){
L->data[++L->Last]=n;
scanf("%d",&n);
}
}
//将一个线性链表打印出来
void PrintList(List L){
for (int i = 0; i < L->Last+1; ++i)
{
printf("%d\n", L->data[i]);
}
}
//在线性表中寻找元素X若存在,返回其位置,如不存在,返回-1
int Find(int X, List L){
int i;
for (i = 0; i < L->Last+1; ++i)
{
if (L->data[i]==X)
{
return i;
}
}
if(i>=L->Last+1)
return -1;
}
//在线性表中第X位置上插入元素i
void Insert(int X, int i, List L){
int temp1;
int temp2;
//先要判定这个表有没有满
if (L->Last==MAXSIZE)
{
printf("线性表已满");
return;
}
//检查位置是否合法
if (i<0||i>L->Last)
{
return;
}
//
for (int j = L->Last; j >= X; j--)
{
L->data[j+1]=L->data[j];
}
L->data[X]=i;
L->Last++;
}
//返回线性表的长度
int Length(List L){
return L->Last;
}
- main 方法
int main(){
List L;
L=MakeEmpty();
printf("---------初始化一个线性表---------\n");
IniList(L);
printf("---------打印这个线性表---------\n");
PrintList(L);
printf("---------返回线性表的长度---------\n");
printf("%d\n", Length(L));
printf("---------查找元素x是否存在--------\n");
printf("%d\n",Find(3,L));
printf("---------在线性表中第X位置上插入元素i--------\n");
Insert(2,9,L);
printf("---------打印插入元素后的线性表线性表---------\n");
PrintList(L);
printf("---------返回线性表的长度---------\n");
printf("%d\n", Length(L));
return 0;
}