数据结构实验四 顺序表

顺序表插入

Posted by Zexin Zhang on October 10, 2017
#include <cstdio>
#include <cstring>
using namespace std;

#define maxlen 1000
typedef struct{
	int data[maxlen];
	int last;
}SequenList;
void SqLsetnull(SequenList *L){
	L->last=-1;
}
int SqLlen(SequenList *L){
	return (L->last+1);
}
bool SqLfull(SequenList *L){
	if(L->last+1==maxlen)
		return true;
	else
	   return false;
}
void SqLinsert(SequenList *L,int i,int x){
	if(SqLfull(L)==true){
		printf("overflow");
	}
	else if( (i < 1) || (i > L->last+2) ){
		printf("error");
	}
	else{
		for(int j=L->last;j>=i+1;j--)
			L->data[j+1]=L->data[j];//move 
		L->data[i-1]=x;             //insert in data[i]
		L->last=L->last+1;   
	}
}
void SqLdelete(SequenList *L,int i){
	if(L->last<0){
		printf("SqlEmpty");
	}
	else if((i<1)||(i>L->last+2)){
		printf("error");
	}
	else{
		for(int j=i;j<=L->last+1;j++)
			L->data[j-1]=L->data[j];
		L->last--;
	}
}
void SqLprint(SequenList *L){
	printf("现有顺序表中的元素:");
	for(int i=0;i<=L->last;i++){
		printf("%d ",L->data[i]);
	}
	printf("\n");
}
int main(){
	SequenList x,*L;
	L=&x;
	SqLsetnull(L);
	int nElement;
	int nNumber;
	printf("请输入顺序表元素的个数:");
	scanf("%d",&nElement);
	printf("依次输入各元素:");
	for(int i=0;i<nElement;i++){
		scanf("%d",&nNumber);
		SqLinsert(L,i+1,nNumber);
	}
	SqLprint(L);
	int nDelete;
	int nDeleteNumber;
	printf("请输入要删除的元素个数(小于%d):",nElement);
	scanf("%d",&nDelete);
	printf("依次要删除元素的位置(从大到小):"); 
	for(int i=0;i<nDelete;i++){
		scanf("%d",&nDeleteNumber);
		SqLdelete(L,nDeleteNumber);
	}
	SqLprint(L);
}