本文章主要是对线性表的相关操作进行总结,以备复习:
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 100
typedef int ElementType;
typedef struct LNode * List;
//定义一个线性表
struct LNode {
ElementType data[Maxsize];
int last;
};
List L; //创建一个指向线性表的指针
List MakeEmpty1(); //初始化线性表
int Find(ElementType x ,List L); // 查找x第一次出现的下标
void Insert(ElementType x,int i,List L); //在下标为i的地方插入x
void Delete(int i, List L); // 删除线性表中第i个位置的元素
ElementType Findkth(int k, List L); // 返回下标为k的当前值
int Length(List L); // 返回线性表的长度
//初始化线性表
List MakeEmpty1()
{
List L;
L = (List)malloc(sizeof(struct LNode));
L -> last = -1;
return L;
}
// 按值查找
int Find(ElementType x,List L)
{
int i = 0;
while(i<=L->last && L->data[i]!=x)
i++;
if(L->last < i)
return -1;
else
return i;
}
//插入操作
void Insert(ElementType x,int i,List L)
{
if (L->last == Maxsize-1) {
printf("表满");
return;
}
if(i<0|| i>L->last+1)
{
printf("位置不合理");
return ;
}
for(int j = L->last;j>=i;j--)
{
L->data[j+1] = L->data[j];
}
L->data[i] = x;
L-> last++;
}
// 删除操作
void Delete(int i, List L)
{
int j;
if(i<0||i>L->last)
{
printf("位置在%d处不存在",i);
return ;
}
for(j = i;j<=L->last;j++)
{
L->data[j]= L->data[j+1];
}
L->last--;
}
//顺序查找
ElementType Findkth(int k, List L)
{
if (k < 0||L->last<k)
{
printf("查找的数字不存在");
return 0;
}
return L->data[k];
}
//表长
int Length(List L)
{
return L->last+1;
}
int main()
{
int i;
L= MakeEmpty1();
Insert(11,0,L);
printf("在线性表L-Data[0]插入11\n");
Insert(25,1,L);
printf("在线性表L-Data[1]插入25\n");
Insert(33,2,L);
printf("在线性表L-Data[2]插入33\n");
Insert(77,3,L);
printf("在线性表L-Data[3]插入77\n");
printf("此时的线性表为:");
for(i=0;i<Length(L);i++)
printf("%d ",L->data[i]);
printf("\n");
printf("查找值为12的下标是:%d\n",Find(2,L));
printf("下标为3的线性表的值是:%d\n",Findkth(3,L));
Delete(2,L);
printf("删除线性表中下标为2的元素\n");
for(i=0;i<Length(L);i++)
printf("%d ",L->data[i]);
printf("\n");
Delete(2,L);
printf("删除线性表中下标为2的元素\n");
printf("此时的线性表为:");
for(i=0;i<Length(L);i++)
printf("%d ",L->data[i]);
printf("\n");
return 0;
}