顺序表的相关操作

#include<stdio.h>
#include<stdlib.h>
#include<iostream.>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct
{
	ElemType *elem;
	int length;
}SqList;
//顺序表的初始化 
Status InitList_Sq(SqList &L) //构造一个空的顺序表L
{   
    L.elem=new ElemType[MAXSIZE];   //为顺序表分配空间
    if(!L.elem) exit(OVERFLOW);       //存储分配失败
    L.length=0;					  //空表长度为0
    return OK;
}
//创建顺序表 
void Create_Sq(SqList &L)
{
		int length;
    	printf("请给顺序表赋值\n");
    	printf("你要输入几个数据:\n");
    	scanf("%d", &length);
    	printf("请依此输入这几个元素:\n");
    	for(int i=0;i<length;i++)
        scanf("%d", &L.elem[i]);
        L.length = length;
}
//在顺序表中取值 
Status GetElem(SqList L,int i,ElemType &e)
{
  if (i<1||i>L.length) return ERROR;   //判断i值是否合理,若不合理,返回ERROR
  e=L.elem[i-1];   //第i-1的单元存储着第i个数据
  return OK;
}
//在顺序表中查找元素 
Status LocateELem(SqList L,ElemType e)
{
	int i;
  for (i=0;i<L.length;i++)
      if (L.elem[i]==e) return i+1;                
  return OK;
}
//在顺序表中插入元素 
Status ListInsert_Sq(SqList &L,int i ,ElemType e)
{
	int j;
   if(i<1 || i>L.length+1) return ERROR;  //i值不合法
   if(L.length==MAXSIZE) return ERROR;   //当前存储空间已满     
   for(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
	
  return OK;
}
//顺序表中删除元素 
Status ListDelete_Sq(SqList &L,int i)
{
	int j;
	if((i<1)||(i>L.length)) return ERROR;	 //i值不合法
	for (j=i;j<=L.length-1;j++)                   
	L.elem[j-1]=L.elem[j];       //被删除元素之后的元素前移  
   	--L.length;               	      //表长减1
  return OK;
}
//打印顺序表 
void print_Sq(SqList &L)
{
	int i;
	for(i=0;i<L.length;i++)
		printf("%d ",L.elem[i]);
	printf("\n");
}
int main()
{
	SqList l;
	int m;
	int n;
	InitList_Sq(l);
	
	Create_Sq(l);
	print_Sq(l);
	GetElem(l,2,n);
	printf("第二个位置的元素为%d\n",n);
	m=LocateELem(l,02);
	printf("02在顺序表中的位置为%d\n",m);
	ListInsert_Sq(l,3,1);
	printf("在第3个位置插入1后,该组数据变为\n");
	print_Sq(l);
	ListDelete_Sq(l,7);
	printf("删除了第7个元素后,该组数据变为\n");
	print_Sq(l);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值