#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ERROR 0
#define OK 1
#define OVERFLOW -2
#include <iostream>
#include <malloc.h>
#include <stdlib.h>

using namespace std;

struct sqlist
{ 
	int *elem;
	int length;
	int listsize;
};

int InitList_Sq(sqlist &L)
{
	L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
	if(!L.elem)
	exit(OVERFLOW);  
	L.length=0;
	L.listsize=LIST_INIT_SIZE;  
	return OK;
}

int listinsert(sqlist &L,int i,int e)
{
	int *newbase,*p,*q;
	if(i<1||i>L.length+1)return ERROR;
	if(L.length>=L.listsize)
	{
		newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
		if(!newbase)return OVERFLOW;
		L.listsize+=LISTINCREMENT;
	}
	q=L.elem+i-1;
	for(p=L.elem+L.length-1;p>=q;--p)
		*(p+1)=*p;
	*q=e;   ++L.length;
	return OK;
}


int locate(sqlist L,int e)
{
	int i,*p;
	i=1;p=L.elem;
	while(i<=L.length && e!=*p)
	{
		++i;
		++p;
	}
	if(i<=L.length)return i;
	else return 0;
}


void unionmerge(sqlist &la,sqlist lb)
{
	int i,e;
	for(i=0;i<lb.length;i++)
	{
		e=*(lb.elem+i);
		if(!locate(la,e)) 
			listinsert(la,la.length+1,e);
	}
}
int ListDelete_Sq(sqlist &L,int i,int &e)
{  
	int *p,*q;
	if(i<1||(i>L.length))
		return ERROR;  
	p=&(L.elem[i-1]); 
	e=*p;  
	q=L.elem+L.length-1;  
	for(++p;p<=q;++p)*(p-1)=*p;
	--L.length;  
	return OK;
} 


void main()
{
	int i,e;  
	sqlist la;
	int List1 [] ={1,2,3};
	InitList_Sq(la);
	for(i=0;i<3;i++)
		listinsert(la,i+1,List1[i]);
	cout<<"第一个集合la中的"<<la.length<<"个元素依次是";
	for(i=0;i<la.length;i++)
		cout<<*(la.elem+i)<<"  ";
	cout<<endl;
	cout<<"请输入要删除第几个元素";
	cin>>i;
	if(ListDelete_Sq(la,i,e))
		cout<<"被删除的元素是:"<<e<<endl;
	cout<<"删除后集合la中的"<<la.length<<"个元素依次是";
	for(i=0;i<la.length;i++)
	 cout<<*(la.elem+i)<<"  ";
	cout<<endl;
	system("pause");
	cout<<endl;
}