实现的功能:
顺序表的查找,插入,删除功能
具体描述:
- 向长度为10的顺序表中输入随机数,并打印出来,查找存储整数30的元素
- 在前面的基础上删除表中的第5个元素,并打印删除后的结果
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define MAXSIZE 10
#define MIN 10
#define MAX 100
typedef struct LNode *List;
struct LNode //构建一个静态顺序表
{
int data[MAXSIZE];//定义数组中元素的个数为MAXSIZE
//数组下标从0-MAXSIZE-1
int last;//记录表尾元素的位置
};
List Ptrl;
List MakeEmpty()//初始化顺序表
{
Ptrl = (List)malloc(sizeof(struct LNode));//为结构体申请一段空间
Ptrl->last = -1;//Ptrl->Last=0,代表线性表含有一个元素
//它等于-1代表该结构没有元素
return Ptrl;
}
int Find(int x, List Ptrl)
{
int i=0;//表示元素在数组中的位置
while (i <= Ptrl->last&&Ptrl->data[i] != x)
//处理器从第一个元素一直扫描到最后一个,所以while循环语句的条件有两个
//第一个就是是否扫描到最后一个元素;第二个是扫描的这个元素不是X。两者不满足其一则跳出循环。
{
i++;
}
if (i > Ptrl->last) return -1;//看i的值如果i > Ptrl->last,说明顺序表已经被遍历完了
//但仍没有找到待查找元素x,所以返回-1
else return i;//否则就是已找到并返回待查找元素的地址
}
void Insert(int x,int i,List Ptrl)
{
int j;
if (Ptrl->last >= MAXSIZE - 1)
{
printf("content is full!");
return;
}
if (i<1 || i>Ptrl->last + 2)
{
printf("illegal position");
return;
}//last指向的是下标为n-1的元素,那么Ptrl->Last+1表示的是线性表的长度(也就是所含元素的最大个数n)。
//此时,该程序段要检查插入的位置是否在1-n+1之间(此处用Ptrl->last+2来表示n+1)
for (j=Ptrl->last;j>=i-1;j--)
{
Ptrl->data[j + 1] = Ptrl->data[j];
}//数列最后一个元素先向后移动
Ptrl->data[i - 1] = x;
Ptrl->last++;//由于新插入了一个元素,last也要向后移一位
return;
}
void Delete(int i, List Ptrl)
{//变量i(ai是从a1到an)代表删除顺序表的第i个元素
int j;//变量j用来记录顺序表的数组下标(数组元素的位置)
if (i<1 || i>Ptrl->last + 1)//Ptrl->last + 1表示线性表的最大长度(也就是表中元素的个数)
{
printf("element%d not exist");
return;
}
for (j = i; j <= Ptrl->last; j++)
{
Ptrl->data[j - 1] = Ptrl->data[j];
}
Ptrl->last--;//Ptrl->last--表示顺序表末尾元素位置减一,也就是末尾元素下标减一
}
int main()
{
int pos;
List L;
L=MakeEmpty();
srand((unsigned)time(NULL));
while(Ptrl->last != MAXSIZE - 1)//插入元素的位置是在1-n+1范围内(包含边界)
{
Insert(rand() % (MAX - MIN + 1) + MIN, Ptrl->last+2, L);
}
printf("current:\n");
for (int i = 0; i <= Ptrl->last; i++)
{
printf("%d ",L->data[i]);
}
pos=Find(30, L);
if (pos = -1)
{
printf("\nthis element doesn't exist");
}
else printf("\n%d", pos);
Delete(5, L);
printf("\nafter delete element:\n");
for (int i = 0; i <= Ptrl->last; i++)
{
printf("%d ", L->data[i]);
}
system("pause");
return 0;
}