顺序线性表的插入,删除操作(完整代码)

1..插入 :在顺序线性表l的第i个位置前插入元素e  。

  • 第一步判断插入位置是否合法,如果不合法则异常退出。
  • 第二步判断线性表存储空间是否不足,如果不足则增加存储容量。
  • 第三步将插入位置及之后元素后移。第四步将待插入元素插入。


 2..删除:从顺序线性表l中删除第i个元素,并用e返回其值  。

  • 第一步判断删除位置是否合法,如果不合法则异常退出。
  • 第二步将待删除位置元素的值赋于e。
  • 第三步将被删除之后的元素左移 。

 代码实现:

//插入,删除操作
#include
#include  //定义杂项函数及内存分配函数
#include
using namespace std;
typedef int elemtype;//将int起别名为 elemtype


//线性表的动态分配顺序存储结构 
#define LIST_INIT_SIZE 100	//线性表存储空间的初始分配量 
#define LISTINCREMENT 2	//线性表存储空间的分配增量 
typedef struct 
{
elemtype *elem;	//存储空间基址 
int length;	//当前长度 
int listsize;	//当前分配的存储容量 
 } sqlist;
 
 //插入操作 
elemtype listinsert(sqlist &l,int i ,elemtype &e)
 {
 	if(i<1||i>l.length+1)
 	 return 1;	//i值不合法
 	if(l.length>=l.listsize)//当前存储位置已满,增加分配
	 {elemtype *newbase;
	 	newbase=(elemtype *)malloc((l.listsize+LISTINCREMENT)*sizeof(elemtype));
	 	if(!newbase)//存储分配失败 
	 	{
	 		cout<<"存储分配失败";
	 		exit(1);//存储分配失败 ,1为异常退出
	 	}  
	 	for(int j = 0 ; j < l.length ; j++)
			newbase[j] = l.elem[j];//给各元素赋值 
	 	l.elem=newbase;//首地址赋值 
	 	l.listsize+= LISTINCREMENT;//增加存储容量,为一个elemtype型元素所占内存 
	 } 
 //newbase=(elemtype *)realloc(l.elem,((l.listsize+LISTINCREMENT)*sizeof(elemtype)));
 
 elemtype *q,*p;
  q = &(l.elem[i-1]);//q为插入地址
  for(p=&(l.elem[l.length-1]);p>=q;p--)//插入位置及之后的元素后移一个位置 
  	*(p+1)=*p;

	 *q=e;//插入e
	 l.length++;//表长增加1 
	 cout<<"插入元素后:"; 
	 for(int i = 0 ; i < l.length ; i++)
  	cout<l.length+1)
 	 return 1;	//i值不合法  
 	 int *p,*q; 
	p=&(l.elem[i]);//p为删除元素地址
	e=p; 
	cout<<"被删除值的值为:"<<*e<

运行结果:
顺序线性表的插入,删除操作(完整代码)_第1张图片

 

你可能感兴趣的:(数据结构)