结合了两本教材的实现,各有可取之处
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
#define Overflow 2
#define Underflow 3
#define NotPresent 4
#define Duplicate 5
#define LISTINCREMENT 10
typedef int ElemType;
typedef struct
{
int n;
int maxlength;
ElemType *element;//动态数组用于存放数据
}SeqList;
//创建线性表
ElemType Init(SeqList* L,int mSize)
{
L->maxlength = mSize;
L->n = 0;
L->element = (ElemType*)malloc(sizeof(ElemType)*mSize);
if(!L->element)
return ERROR;
return OK;
}
//查找
ElemType Find(SeqList* L,int i,ElemType* x)
{
if(i<0||i>L->n-1)
return ERROR;
*x = L->element[i];
return OK;
}
//通过输入的方法建立
ElemType Input(SeqList* L,int n)
{
int i;
if(n>L->maxlength)
{
printf("建立失败!");
return ERROR;
}
for(i = 0;i < n;i++)
{
int x;
printf("请输入数据:");
scanf("%d",&x);
L->element[i] = x;
L->n = L->n +1;
}
}
//插入(简单)
//ElemType Insert(SeqList* L,int i,ElemType x)
//{
// int j;
// if(i<-1||i>L->n-1)
// return ERROR;
// if(L->n == L->maxlength)
// return ERROR;
// for(j = L->n-1;j > i;j--)
// L->element[j+1] = L->element[j];
// L->element[i+1] = x;
// L->n = L->n + 1;
// return OK;
//
//}
//插入(完善)
ElemType Insert(SeqList* L,int i,ElemType x)
{
if(i<-1||i>L->n-1)
return ERROR;
if(L->n >= L->maxlength)
{
ElemType* newbase = (ElemType*)realloc(L->element,(L->maxlength+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
return ERROR;
L->element = newbase;
L->maxlength += LISTINCREMENT;
}
//通过指针的方式插入
ElemType* q = &(L->element[i]);
ElemType* p = &(L->element[L->n-1]);
for(;p>q;--p)
*(p+1) = *p;
*(q+1) = x;
L->n = L->n + 1;
return OK;
}
//删除
ElemType Delete(SeqList* L,int i)
{
int j;
if(i<0||i>L->n-1)
return ERROR;
if(!L->n)
return ERROR;
for(j = i+1;j < L->n; j++)
L->element[j-1] = L->element[j];
L->n--;
return OK;
}
//打印
ElemType Output(SeqList* L)
{
int i;
if(!L->n)
return ERROR;
for(i = 0;i<=L->n-1;i++)
{
printf("%d ",L->element[i]);
}
return OK;
}
//撤销
void Destory(SeqList* L)
{
L->n = 0;
L->maxlength = 0;
free(L->element);
}
//顺序表的合并
ElemType MergList(SeqList *La,SeqList *Lb,SeqList &Lc)
{
ElemType *pa = La->element;
ElemType *pb = Lb->element;
Lc.n = Lc.maxlength = La->n + Lb->n;
ElemType *pc = Lc.element = (ElemType *)malloc(Lc.n*sizeof(ElemType));
if(!Lc.element)
return Overflow;
ElemType *pa_last = La->element + La->n - 1;
ElemType *pb_last = Lb->element + Lb->n - 1;
while(pa<= pa_last && pb<= pb_last)
{
if(*pa < *pb)
*pc++ = *pa++;
else
*pc++ = *pb++;
}
while(pa<=pa_last) *pc++ = *pa++;
while(pb<=pb_last) *pc++ = *pb++;
return OK;
}
int main()
{
int i,n;
printf("输入长度:");
scanf("%d",&n);
SeqList list;
Init(&list,10);
// Input(&list,n);
for(i=0;i<9;i++)
Insert(&list,i-1,i);
Output(&list);
Delete(&list,0);
Destory(&list);
return OK;
}