啥也不说,为了工作……
C++的代码在VS2010中写的时候总感觉有些水土不服,还是回到熟悉的vc++6.0吧
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct
{//顺序表结构
int *elem;
int length;
int listsize;
}SqList;
int InitList(SqList &L)
{//构造一个空的线性表
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(L.elem==NULL)
{
exit(-1);
}
L.length=0;
L.listsize=LIST_INIT_SIZE;
return 0;
}
int ListInsert_Sq(SqList &L, int i, int e)
{//向顺序表中第i个位置处插入元素
if(i<1 || i>L.length)
return -1;
if(L.length>=L.listsize)
{
newbase=(int *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(int));
if(newbase!==NULL)
{
L.elem=newbase;
L.listsize=L.listsize+LISTINCREMENT;
}
}
for(int r=L.length;r>=i;r--)
L.elem[r]=L.elem[r-1];
L.elem[r]=e;
L.length++;
return 0
}
int ListDelete_Sq(SqList &L, int i, int &e)
{//顺序表删除第i个元素
if(i<1 || i>L.length)
return -1;
for(int r=i-1;r<L.length,r++)
L.elem[r]=L.elem[r+1];
L.length--;
}
void MergeList_Sq(SqList La, SqList Lb, SqList &Lc)
{//已知顺序线性表La和Lb的元素按值非递减排列,归并La和Lb得到新的顺序表Lc
//Lc也按值非递减排列
Lc.length=La.length+Lb.length;
Lc.listsize=Lc.length;
Lc.elem=(int *)malloc(Lc.listsize*sizeof(int));
if(Lc.elem==NULL) return -1;
int *pa=La.elem;
int *pb=Lb.elem;
int *pc=Lc.elem;
int *pa_last=La.elem+La.length-1;
int *pb_last=Lb.elem+Lb.length-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++);
}
int DestroyList_Sq(SqList &L)
{//销毁顺序表
if(L.elem!==NULL)
{
free(L.elem);
L.elem=NULL;
}
return 0;
}