ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

线性表_顺序结构

2022-06-10 23:03:56  阅读:134  来源: 互联网

标签:顺序 last 线性表 int 元素 List PtrL data 结构


//关于线性表的复习
//要点就数组存储,有一个last/len值表明表的长度,或者说表面最后一个元素的物理/存储位置
//数据数组存储是从a[0]开始存储的,求逻辑长度时得让物理长度last加1,即逻辑长度为last+1
//主要要注意的是逻辑和物理的转换;
#define MAX 1000
typedef struct node *List;
struct node
{
	int data[MAX];
	int last; //len
};
node L;

List MakeEmpty()
{
	List PtrL;//一个指向node类型的指针;
	PtrL = (List)malloc(sizeof(node));
	PtrL->last=-1;
	return PtrL;
}

int Find(int x,List PtrL)//按值查找
{
	int i=0;
	while(i<=PtrL->last && PtrL->data[i] !=x)//两个条件都可能被破坏
		i++;
	if(i>PtrL->last)return -1;
	else return i;
}

void Insert(int x,int i,List PtrL)//插入到第i个元素前面,则表示插入到a[i-1]这个元素的前面
{
	int j;
	if(PtrL->last == MAX-1)//MAX为数组大小,数组存储从0开始,故最后一个元素下标为MAX-1
	{
		cout << "满了";
		return;
	}
	if(i<1||i>PtrL->last+2)//此处i为逻辑位置,元素下标从1开始数,表示插入到第i个数的前面
	{//PtrL->last+1表示逻辑位置的最后一个数,即物理位置的a[last];
		cout << "位置不合法";
		return;
	}
	for(int j=PtrL->last;j>=i-1;j--)//从最后一个元素开始,每个都往后移动一位,i为逻辑位置,直到移动完a[i-1]就可以插入了
		PtrL->data[j+1]=PtrL->data[j];
	//移动完后a[i-1]就可以认为是空了,即第i个位置为空
	PtrL->data[i-1]=x;
	PtrL->last++;
	return;
}

void del(int i,List PtrL)
{
	int j;
	if(i<1||i>PtrL->last+1)//i为删除第i个元素,last+1为最后一个位置,即a[last]这个元素;
	{
		cout << "位置不合法";
		return;
	}
	for(int j=i;j<=PtrL->last;j++)//从第i+1个元素开始,也就是a[i]开始,到最后一个元素都往前移动
	//a[i-1]即第i个元素就被覆盖了,这样就实现了删除
		PtrL->data[j-1]=PtrL->data[j];
	PtrL->last--;
}

 

标签:顺序,last,线性表,int,元素,List,PtrL,data,结构
来源: https://www.cnblogs.com/lxl-233/p/16364890.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有