线性表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#define LIST_INIT_SIZE 100

#define LISTINCREMENT 10

typedef struct

{

int *elem;

int length;

int listsize;

}SqList;

void nouse(void)//为了使界面更清晰

{

int i;

printf("\n");

for (i = 50;i > 0;i--)

printf("*");

printf("\n");

}

Status creat_sq(SqList *L)

//建立一个线性表

{

L->elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));

if (!L->elem) exit(OVERFLOW);

L->length = LISTINCREMENT;

L->listsize = LIST_INIT_SIZE;

return OK;

}//creat_aq

Status DestroyList(SqList *L)

//若线性表L已存在,则释放

{

if (L->elem)

{

free(L->elem);

}

return OK;

}//DestroyList

Status ClearList(SqList *L)

//若线性表L不为空,则将其置为空表

{

if (L->length > 0)

{

L->length = 0;

}

return OK;

}//ClearList

void input_sq(SqList *L)

//为线性表赋值

{

int *p;

int i = 1,n = 0;

char c;

printf("输入要建立的线性表的长度(n < L->listsize):");

scanf("%d",&n);

printf("\n");

if (creat_sq(L))

{

p = L->elem;

if (n <= L->listsize)

{

for (;(p <= L->elem + n - 1);p++)//为线性表赋值

{

printf("输入第%d个数据:",i++);

scanf("%d",p);

printf("\n");

}

L->length = n;

}

else

{

printf("数据不合法!\n");

c = getchar();//无特殊作用,为了使窗口停留

c = getchar();

exit(0);

}

}

}//input_sq

void output_sq(SqList *L)

//输出线性表中的值

{

int i;

for (i = 0;i < L->length;i++)

printf("%3d",*(L->elem + i));

}//output_sq

Status compare(int x,int y)

//比较两个整数的大小

{

if (x == y) return OK;

return ERROR;

}//compare

int LocatElem_sq(SqList *L,int e,Status (*compare)(int x,int y))

//在顺序线性表中查找第一个与e满足compare()的元素的位置//若找到,返回其位序,否则返回0

{

int i = 1;

int *p;

p = L->elem;

while ((i<=L->length) && (!(*compare)(*p++, e)))

{

++i;

}

if (i <= L->length)

return i;

return ERROR;

}//LocatElem_sq

Status Listinsert_sq(SqList *L,int i,int e)

//在线性表中第i个元素之前插入元素e

//i的取值范围为1<= i <= L.length + 1

{

int *newbase;

int *q;

int *p;

if ((i<1) && (i>L->length+1))

{

return ERROR; //i值不合法

}

if (L->length >= L->listsize)

{

newbase = (int *)realloc(L->elem,

(L->listsize + LISTINCREMENT)*sizeof(int));

if (!newbase)

{

exit(0);

}

L->elem = newbase;//新基址

L->listsize += LISTINCREMENT;//增加存储容量

}

q = &(L->elem[i-1]);//q为插入位置

for (p=&(L->elem[L->length-1]); p>=q; --p)

{

*(p+1) = *p;

}

*q = e;//插入e

相关文档
最新文档