完整代码:
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
struct SeqList
{ int MAXNUM; /* 顺序表中最大元素的个数*/
int n; /* 存放线性表中元素的个数n≤MAXNUM */
DataType *element; /* element[0],element[1],…,element[n - 1]存放线性表中的元素 */
};
typedef struct SeqList *PSeqList;
PSeqList createNullList_seq(int m ) {
/* 创建新的顺序表 */
PSeqList palist= (PSeqList)malloc(sizeof(struct SeqList));
if (palist!=NULL){
palist->element= (DataType*)malloc(sizeof(DataType)*m);
if(palist->element){
palist->MAXNUM=m;
palist->n = 0; /*空表长度为0 */
return (palist);
}
else free (palist);
}
printf("Outof space!!\n"); /* 存储分配失败*/
return NULL;
}
int isNullList_seq( PSeqList palist ) {
/*判别palist所指顺序表是否为空表。*/
if((palist == NULL) || (palist->n == 0)) {
return 1;
}
return 0;
}
int locate_seq( PSeqList palist, DataType x ) {
/* 求x在palist所指顺序表中的下标*/
int i, ret = -1;
if(palist == NULL) return ret;
ret = palist->n;
for(i=0; i<palist->n; ++i) {
if(palist->element[i] >= x) {
ret = i;
break;
}
}
return ret;
}
int insertPre_seq(PSeqList palist, int p, DataType x)
/* 在palist所指顺序表中下标为p的元素之前插入元素x*/
{
int i,ret = -1;
if(palist == NULL || palist->n >= palist->MAXNUM) return ret;
if(p>=palist->n) {
palist->element[palist->n] = x;
ret = palist->n;
++palist->n;
}
else {
for(i=palist->n; i>p; --i) {
palist->element[i] = palist->element[i-1];
}
palist->element[i] = x;
ret = i;
++palist->n;
}
return ret;
}
int deleteP_seq( PSeqList palist, int p )
/* 在palist所指顺序表中删除下标为p的元素*/
{
int i;
if(isNullList_seq(palist) || p>=palist->n) return -1;
for(i=p-1; i<palist->n-1; ++i) {
palist->element[i] = palist->element[i+1];
}
--palist->n;
return 1;
}
void print(PSeqList palist) {
int i;
if(isNullList_seq(palist)) return;
for(i = 0; i<palist->n; ++i) {
printf("%d\t", palist->element[i]);
}
if(palist->n > 0) printf("\n");
}
/*
LA={1,1,3,3,4,6},LB={2,3,5,7,9},
*/
int main() {
int i;
PSeqList LA, LB,LC;
int a[]={1,1,3,3,4,6}, b[] = {2,3,5,7,9};
LA = createNullList_seq(6);
LB = createNullList_seq(5);
for(i=0;i<6;++i) {
insertPre_seq(LA, i, a[i]);
}
print(LA);
for(i=0;i<5;++i) {
insertPre_seq(LB, i, b[i]);
}
print(LB);
LC = createNullList_seq(LA->MAXNUM + LB->MAXNUM);
for(i=0;i<LA->n;++i) {
insertPre_seq(LC, i, LA->element[i]);
}
for(i=0;i<LB->n;++i) {
int p = locate_seq(LC, LB->element[i]);
insertPre_seq(LC, p, LB->element[i]);
}
print(LC);
return 0;
}