顺序表的增删改查

#include<stdio.h>
#define ERROR 0
#define OK 1
typedef int Status; 
typedef int ElemType; 

//---------顺序表的存储结构 ------------
#define MAXSIZE 100 		//顺序表可能达到的最大长度 
typedef struct
{
	ElemType *elem;			//存储空间的基地址 
	int length ;			//当前长度 
 } SqList ;					//顺序表的结构类型为 SqList
 
//1.---------顺序表的初始化 --------
 Status InitList(SqList &L )
 {//构造一个空的顺序表L
 	L.elem = new ElemType[MAXSIZE];	//为顺序表分配一个大小为 MAXSIZE的数组空间
 	if(!L.elem) 
 	return ERROR;					//存储分配失败退出 
 	L.length =0 ;					//空表长度为 0 
 	return OK;
 }
 
//2.---------顺序表的插入 --------
 Status ListInsert(SqList &L,int i,ElemType e)
 {//在顺序表L中第i个位置插入新的元素e,i值合法的范围是1<=i<=L.length+1
 if((i<1)||(i>L.length+1)) 
 {printf("溢出了!"); //i值不合法 
 return ERROR;}				
 if(L.length==MAXSIZE){//当前存储空间已满 
 	printf("满啦!"); 
 	return ERROR;}
 for(int j=L.length-1;j>=i-1;j--)
 {L.elem[j+1]=L.elem[j];}		//插入位置及之后的元素后移
 L.elem[i-1]=e;					//将新元素e放入第i个位置
 ++L.length;					//表长加 1
 }
 
//3.---------顺序表的取值 --------
 Status GetElem(SqList L,int i,ElemType &e) 
 {
 	if (i<1||i>L.length)
 	return ERROR;				//判断i值是否合理,若不合理,返回ERROR
	 e= L.elem[i-1];			//elem[i-1]单元存储第i个数据元素 
	 return OK; 
 }
 
//4.---------顺序表的查找 --------
 int LocateElem(SqList L,ElemType e)
 {//在顺序表L中查找值为e的数据元素,返回其序号 
 for(int i=0;i<L.length;i++)
 	if(L.elem[i]==e)
 	return i+1;			//查找成功,返回序号i+1
	 return 0;			//查找失败,返回0 
 }
 
//5.---------顺序表的删除--------
  Status ListDelete(SqList &L,int i)
  {//在顺序表L中删除第i个元素,i值的合法范围是1<=i<=L.length
   if((i<1)||(i>L.length))
   return ERROR;			//i值不合法
   for(int j=i;j<=L.length-1;j++)
   L.elem[j-1]=L.elem[j];				//被删除元素之后的元素前移
   --L.length;							//表长-1
   return OK;
  }
//6.-----------顺序表的输出----------- 
  void print(SqList &L) { 
  	for(int i =0;i<L.length;i++){
  		printf("%d  ",L.elem[i]);
	  }
	  printf("\n");
  }
int main()
  {
  	SqList La;
  	int i=2,n=0,m,x;
  	int e=0;
  	int b = InitList(La);		//初始化La 
  	if(b==1)
  	printf("初始化成功!\n");
  	else
  	printf("初始化失败!\n");
  	
  	printf("请输入元素个数=? ");  //插入元素 
	scanf("%d",&n);
    for(i=1;i<=n;i++) 
	{	printf("i=%d\n",i);
		scanf("%d",&e);
	 	m=ListInsert(La,i,e);
	    if(m==0)printf("插入失败!\n");
		}
	printf("输出当前顺序表:");
	print(La);					//输出当前顺序表 
	 
	 
	printf("输入要插入的位置:");
	scanf("%d",&i);
	printf("输入插入的数字:"); 	//插入元素 
	scanf("%d",&e);
	m=ListInsert(La,i,e);
		if(m==0)printf("插入失败!\n");
  	printf("输出当前顺序表:");
	print(La);		
	 
  	printf("你要取的位置?") ;
  	scanf("%d",&i);
  	GetElem(La,i,e) ;	 		//取值 
  	printf("取值为:%d\n",e);
    
    printf("你要取的值?") ;		 
  	scanf("%d",&i);
    x=LocateElem(La,i);				//找位置
    printf("位置为:%d\n",x);
    
    printf("你要删除的位置是?");
    scanf("%d",&i);
  	b=ListDelete(La,i);
  	if(b==1)
  	printf("删除成功!\n");
  	else
  	printf("删除失败!\n");
  	printf("输出当前顺序表:");
  	print(La);					//输出当前顺序表 
}
 
上一篇:顺序表基本操作的实现


下一篇:C++语言导学 第二章 用户自定义类型 - 2.2 结构