线性表(2)--顺序表

#include<stdio.h>
#include<stdlib.h> 
#define Init_size 100//初始长度 
#define ListIncrement//增量
#define Elemtype int
#define ERROR 0
#define OK 1
typedef struct{
	Elemtype *elem;//存储空间基址 
	int length; //当前长度
	int listsize;//容量 
}SqList;
//构造空表 
int InitList_Sq(SqList &l)
{
   l.elem=(Elemtype*)malloc(Init_size*sizeof(Elemtype));
   if(!l.elem){
   	printf("初始化失败!\n");
   	return ERROR;
   }
   l.length=0;
   l.listsize=Init_size;
   return OK;
}
//插入元素
int Insert_Sq(SqList &l,int i,Elemtype e)//第i个位置插入e 
{
  if(i<1||i>l.length+1)//插入位置只能为0~l.length+1 
  {
      printf("插入位置不合法!\n");
      return ERROR;
  }	
  if(l.length>=l.listsize)//当前存储空间已满,增加分配 
  {
  	 int *newbase=(Elemtype*)realloc(l.elem,(l.listsize+Init_size)*sizeof(Elemtype));
  	 if(!newbase) return ERROR;
	 l.elem=newbase;
	 l.listsize+=Init_size; 
  }
  //插入位置后的元素后移一个单位 
  int *p,*q;
  q=&l.elem[i-1]; //第i个元素的存储位置为l.elem[i-1] 
  for(p=&l.elem[l.length-1];p>q;p--)  *(p+1)=*p;
  *q=e;//插入e 
  l.length+=1;//表长加一 
  return OK; 
} 
//删除元素,并返回 
int ListDelete_Sq(SqList &l,int i)
{
   if(i<1||i>l.length)//删除已有元素 
   {
   	  printf("删除位置不合法!\n");
      return ERROR;
   }
   int *q,*p;
   p=&l.elem[i-1];
   for(q=&l.elem[l.length-1];p<q;p++) *p=*(p+1);	
   l.length--;
   return OK;
} 
//初始化表中元素
void input(SqList &l)
{
  int n,a;
  printf("输入初始化元素个数:");
  scanf("%d",&n);
  printf("依次输入(%d)元素:",n); 
  for(int i=1;i<=n;i++)
  {
	scanf("%d",&a);
	Insert_Sq(l,i,a);
  }
  	
} 
//输出表中元素 
void print(SqList l)
{
	printf("表中元素为(%d):",l.length); 
    for(int i=0;i<l.length;i++)
	{
		printf("%d ",l.elem[i]);
	} 
	printf("\n");	
} 
int main(){
	SqList l;
	InitList_Sq(l);
	input(l);
	print(l);
	ListDelete_Sq(l,3);
	print(l);

	
} 

运行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值