线性表的顺序存储结构

                           线性表的顺序存储结构

        记录本人学习数据结构的历程,现将分享总结出来的对线性表顺序存储结构的操作。

     直接放代码,希望对大家学习线性表的顺序存储结构有所帮助。

#include<iostream.h>
#define MAXSIZE 100
typedef int TypeElem;
typedef struct
{
  TypeElem* elem;
  int length;
}SqList;

//顺序表的初始化
void init_SqList( SqList &L)
{
   L.elem=new TypeElem[MAXSIZE];
	   if(L.elem!=NULL)
	   {
		   L.length=0;
	       cout<<"动态分配空间成功!!";
	   }
	   else 
		    cout<<"动态分配空间失败!";
}

//为创建的表赋上其长度和内容
 void creat_SqList(SqList &L)
 {
        int i;
	 cout<<"请输入需要定义的表的长度为:";
	 cin>>L.length;
	 cout<<"请输入一组数:";
	 for(i=0;i<L.length;i++)           //为表中添上元素
	 {
	    cin>>L.elem[i];
	 }
 }

//输出被添上内容的线性表
void printf_SqList(SqList L)
{   cout<<"输出赋上内容的线性表如下:";
   for(int i=0;i<L.length;i++)         //输出刚添上元素的线性表
	 {
	  cout<<L.elem[i]<<'\t';
	 }
}

//查找表中的一个元素,第一种按位置查找,并记录下该元素在线性表中的位置
int select_onelem(SqList L,TypeElem &t,int &w )
{
    int i;
	for(i=0;i<L.length;i++)
	{
	  if(t==L.elem[i])
		  return w=i+1;
	}
}

//第二种方法直接查找表中的第i个位置上的元素,并且利用函数返回这个位置上的元素
TypeElem select_ilocaelem(SqList L,TypeElem &x,int &i )
{
	 int j;
	  //检查i的位置是否合法
	 if(i<1||i>L.length)
	 {
	  return 0;
	 }
	else
	{  
			for(j=0;j<L.length;j++)
			 {
				if((j+1)==i)
				{
				  x=L.elem[j];
				  return x;
				}
			}
	}
}

//在线性表中第i个位置插入一个元素
void insert_melem(SqList &L,TypeElem &m,int a)
{
      int j;
     //判断插入的位置是否合法
	  if(a<1||a>L.length+1)
			 cout<<"插入的位置不合法!!";
			 else if(L.length==0)//判断表是否是空表
				 {
				  cout<<"该表是空表!";
			        }
			  else
			  {
					  for(j=L.length-1;j>=a-1;j--)
					  {
						L.elem[j+1]=L.elem[j];
					  }
					   L.elem[a-1]=m;
						  L.length++;
			  }
				cout<<"输出最终插入元素的这个线性表如下:"<<endl;
				printf_SqList(L);
}

//删除一个指定位置b的元素n
void delete_nelem(SqList &L,int b)
{
   int j;
     //判断插入的位置是否合法
	  if(b<1||b>L.length+1)
	      cout<<"删除的位置不合法!!";
			 else if(L.length==0)//判断表是否是空表
				 {
				  cout<<"该表是空表!";
			           }
			  else
			  {
					  for(j=b;j<L.length;j++)
					  {
						L.elem[j-1]=L.elem[j];
                         
					  }
						  L.length--;
              
			  }
				cout<<"输出最终删除元素后的这个线性表如下:"<<endl;
				printf_SqList(L);
}
//主函数
void main()
{
  SqList L;
  TypeElem t,x,m;
  int w=0,i,a,b; //记录查找的元素在线性表中的位置            //查找第i个位置上的元素并且返回这个位置上的这个元素
  init_SqList(L);
  creat_SqList(L);
  printf_SqList(L);
  cout<<"请输入要查找的元素是:";
  cin>>t;
  w=select_onelem(L,t,w);
  if(w==0)
	  cout<<"该表中没有所需查找的这个元素";
  else
	  cout<<"查找的该数在表中的位置是:"<<w<<endl;
  cout<<"请输入要查找的位置是:"<<endl;
  cin>>i;
  x=select_ilocaelem(L,x,i);
	if(x==0)
		cout<<"该查找的位置不合法!!";
	else
		cout<<"该位置对应的元素是:"<<x<<endl;
       cout<<"请输入要插入的这个元素是:";
	cin>>m;
	cout<<"请输入要插入元素的位置是多少:";
	cin>>a;
   insert_melem(L,m,a);
   cout<<"请输入要删除的位置是:";
   cin>>b;
   delete_nelem(L,b);
}
}

 

 


直接附上运行的效果图:

 

PS:该文章所有版权归个人所有,允许转载,目前只总结对线性表顺序存储结构的一些操作,并没有将其与链式存储结构进行比较,后续会继续更新。若有不同想法的小伙伴们欢迎私信,文章不免会有瑕疵,还请大家多多指正,待我确认后会作出相应修改。

更多精彩内容请关注公众号:干货分享录

 

       

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sustyle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值