100 Days of Code-day4

实现的功能:

顺序表的查找,插入,删除功能

具体描述

  1. 向长度为10的顺序表中输入随机数,并打印出来,查找存储整数30的元素
  2. 在前面的基础上删除表中的第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;
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值