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

时间:2024-11-11 10:13:09

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

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


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

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

 代码实现:

//插入,删除操作
#include<>
#include <> //定义杂项函数及内存分配函数
#include<iostream>
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>+1)
 	 return 1;	//i值不合法
 	if(>=)//当前存储位置已满,增加分配
	 {elemtype *newbase;
	 	newbase=(elemtype *)malloc((+LISTINCREMENT)*sizeof(elemtype));
	 	if(!newbase)//存储分配失败 
	 	{
	 		cout<<"存储分配失败";
	 		exit(1);//存储分配失败 ,1为异常退出
	 	}  
	 	for(int j = 0 ; j <  ; j++)
			newbase[j] = [j];//给各元素赋值 
	 	=newbase;//首地址赋值 
	 	+= LISTINCREMENT;//增加存储容量,为一个elemtype型元素所占内存 
	 } 
 //newbase=(elemtype *)realloc(,((+LISTINCREMENT)*sizeof(elemtype)));
 
 elemtype *q,*p;
  q = &([i-1]);//q为插入地址
  for(p=&([-1]);p>=q;p--)//插入位置及之后的元素后移一个位置 
  	*(p+1)=*p;

	 *q=e;//插入e
	 ++;//表长增加1 
	 cout<<"插入元素后:"; 
	 for(int i = 0 ; i <  ; i++)
  	cout<<[i]<<" ";
  	cout<<endl; 
	 return 0; 
  }   
  
  //删除操作。从顺序线性表l中删除第i个元素,并用e返回其值  
elemtype  listdelete(sqlist &l,int i,elemtype *e)
 {
 	if(i<1||i>+1)
 	 return 1;	//i值不合法  
 	 int *p,*q; 
	p=&([i]);//p为删除元素地址
	e=p; 
	cout<<"被删除值的值为:"<<*e<<endl; 
	q=+-1;//表尾元素位置 

	for(p++;p<=q;p++)//被删除之后的元素左移   注意初始值为p++ 
	*(p-1)=*p;

	 --;//表长减1 
	 cout<<"删除元素后:"; 
	for(int i=0;i<;i++)
	  	cout<<[i]<<" ";
	  	cout<<endl;
	  return 0; 
  } 
  
  
int main()
{
  	sqlist l;
  	elemtype b[]={1,4,5,6};
  	=b;
 	=sizeof(b)/sizeof(elemtype); 
  	=sizeof(elemtype)*;
  	elemtype e,d;
  	e = 9;//待插入元素的值 
  	cout<<"原序列:" ;
  	for(int i=0;i<;i++)
  		cout<<[i]<<" ";
  		cout<<endl;
	listinsert(l,2,e);   
  	
  	listdelete(l,3,&d);
} 
//int *p;
//p=&([i]);
//
//与int *p=&([i]);含义相同 
  	

运行结果: