线性表及其实现-顺序存储(数组篇)



整个最关键的就是这句话: “利用数组的连续存储空间顺序存放线性表的各元素”

//线性表的顺序存储实现
typedef struct 	listnode *list;//typedef是预定义关键字,相当于类型重命名,起个简单的名字,这里就是用List表示struct LNode结构体指针
struct listnode{
	int  data[maxsize];   //定义一个数组  存int类型数据 
	int last;//last 线性表的长度 last 存进去的元素的长度 要小于等于 数组的大小 
};
struct listnode l; //定义一个 struct listnode类型的变量 l
list ptrl;  //list ptrl;相当于 struct listnode *ptrl; 结构体指针 

//线性表的主要操作的实现

//1.初始化(建立空的顺序表)
list makeempty()
{
	list ptrl;  //定义一个结构体类型的变量 ptrl 其实就是 头指针 
	ptrl = (list) malloc(sizeof(struct listnode)); //动态申请储存空间 
	ptrl->last = -1;//因为还没有元素存进去 
	return ptrl; //返回头指针 
 } 
// 查找元素 操作的实现 
int find (int X,list ptrl ) // 
{ int i;
  for(i=0;i<=ptrl->last&&ptrl->data[i]!=X)
  if(i>ptrl->last) return -1;  /* 如果没找到,返回-1 */ 
   else return i; //找到了就返回该元素的下标。 
}
//插入操作的实现 (将元素放进数组)

void insert(int X;int i;list ptrl)//代插入元素是X,插入位置是i; 
{
  int j;
  if(ptrl->last==maxsize){/* 表空间已满,不能插入*/
  	printf("表满了")
  	return; 
  }	
  if(i<1||i>ptrl->last+2/*防止空间的浪费*/){
  	printf("位置不合法");
	  return; 
  }
  for(j=ptrl->last;j>=i-1;j--)///在数组中插入元素要先把元素往后移动,腾出位置来
  {
  	ptrl->data[j+1]=prtl->data[j];
  }
  ptrl->data[i-1]=X;//为什么是i-1;因为 下标从0开始计算;第i个元素的下标是i-i; 
  ptrL->last++; //添加了一个元素进去,所以线性表长度要加1; 
  return; 
} 
//删除操作的实现 (删除数组中的元素)
 
void delete( int i;list ptrl) 
{
	int j;
	if( i < 1 || i > ptrL->last+1 ) { 
	printf (“不存在第%d个元素”, i );
	}
    for ( j = i; j <= ptrL->last; j++ ){
      ptrL->data[j-1] = ptrL->data[j];/*将 ai+1~ an顺序向前移动*/
	  } 
     ptrL->last--; /*Last仍指向最后元素*/
     return;
}
posted @ 2021-07-21 15:31  日月既往、不复可追。  阅读(188)  评论(0编辑  收藏  举报
Fork me on GitHub /*音乐*/ 1 2 3
4