线性表
- 线性表是零个或多个元素的又穷序列。
- 一般其结构体成员主要有最大个数,当前个数,数组
- 下方是线性表基本操作C代码实现
#include <stdio.h>
typedef int DataType;
struct seqList
{
int MAXNUM;
int n;
DataType *element;
};
typedef struct seqList *List;
List CreateNULLseqList(int m) //create NULL list
{
List list=(List )malloc(sizeof(struct seqList));
if(list != NULL)
{
list->element=(DataType *)malloc(sizeof(DataType)*m);
if(list->element != NULL)
{
list->MAXNUM=m;
list->n=0;
return list;
}
}
printf("Out of space!\n");
return NULL;
}
int IsListNULL(List list)
{
if(list==NULL) return 1;
return 0;
}
void InputseqList(List list, int n)
{
int arr[100];
list->n=n;
// printf("%d \n", n);
for(int i=0; i<list->n; i++)
{
scanf("%d", &arr[i]);
list->element[i]=arr[i];
}
}
void PrintseqList(List list)
{
printf("当前的顺序表为:");
for(int i=0; i<list->n; i++)
{
printf("%d ", list->element[i]);
}
printf("\n");
}
//插入就往后移
int InsertPre(List list, int p, DataType x)
{
int i;
//判断顺序表是否满了
if(list->n+1>=list->MAXNUM)
{
printf("Overflow!\n");
return 0;
}
if(p<0 || p>list->n)
{
printf("Not exit!\n");
return 0;
}
//顺序表的插入,需要元素后移,即在循环没找到时后移
for(i=list->n-1; i>0 && i>=p; i--)
{
list->element[i+1]=list->element[i];
}
list->element[i+1]=x;
list->n=list->n+1;
return 1;
}
int InsertPost(List list, int p, DataType x)
{
int i;
if(list->n+1>=list->MAXNUM)
{
printf("Overflow!\n");
return 0;
}
if(p<0 || p>list->n)
{
printf("Not exit!\n");
return 0;
}
for(i=list->n-1; i>p; i--)
{
list->element[i+1]=list->element[i];
}
list->element[i+1]=x;
list->n=list->n+1;
return 1;
}
//删除就往前移
int DelseqList(List list, int p)
{
if(IsListNULL(list)) return 0;
for(int i=p; i<list->n-1; i++)
{
list->element[i]=list->element[i+1];
}
list->n=list->n-1;
return 1;
}
//默认无重复元素
int LocateList(List list, DataType x)
{
if(IsListNULL(list)) return 0;
for(int i=0; i<list->n; i++)
{
if(list->element[i]==x) return i;
}
}
int main()
{
List list;
int m, n, p;
DataType x;
printf("请输入顺序表最多可以存储多少个元素:");
scanf("%d", &m);
list=CreateNULLseqList(m);
printf("\n请输入当前顺序表所要存储的数据个数及数据:");
scanf("%d", &n);
InputseqList(list, n);
PrintseqList(list);
printf("\n前插,请输入要插入元素的位置及元素:");
scanf("%d", &p);
scanf("%d", &x);
InsertPre(list, p, x);
PrintseqList(list);
printf("\n后插,请输入要插入元素的位置及元素:");
scanf("%d", &p);
scanf("%d", &x);
InsertPost(list, p, x);
PrintseqList(list);
printf("\n请输入要查找的元素:");
scanf("%d", &x);
printf("该元素的位置为%d\n", LocateList(list,x));
return 0;
}
代码中的位置,指的是元素在线性表中element的下标。
运行结果如下: