顺序表学习1///
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 1000
#define LIST_INCREAMENT 100
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define DATA_SIZE 2200
typedef int ElemType;
typedef int Status;
typedef struct {
ElemType* elem;
int length;
int listsize;
}SqList;
Status compare(ElemType e1, ElemType e2)
{
if (e1%e2==0)
return OK;
return ERROR;
}
int main() {
SqList test1;
int i;
int No=0;
if(InitList_Sq(&test1))
printf("顺序表初始化成功!\n");
for (i = 0; i <= DATA_SIZE; i++) {
AddList_Sq(&test1, i, 2 * i);
if (i == DATA_SIZE) printf("数据插入成功!\n");
}
ReviewList_Sq(&test1);
for (i = 1; i <= test1.length; i++) {
No=Locate_Sq(&test1, 8, i, (*compare));
if (No) printf("\n第%d个符合条件的数据定位于%d位,值为%d", i, No,test1.elem[No-1]);
No = 0;
}
return 0;
}
Status InitList_Sq(SqList* L) {
L->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (!L->elem) exit(OVERFLOW);
L->length = 0;
L->listsize = LIST_INIT_SIZE;
return OK;
}
Status AddList_Sq(SqList* L, int i, ElemType a) {
ElemType* newbase;
int y;
if (i<1 || i>L->length + 1) return ERROR;
if (L->length >= L->listsize) {
newbase = (ElemType*)realloc(L->elem,(LIST_INIT_SIZE + LIST_INCREAMENT) * sizeof(ElemType));
if (!newbase) exit(OVERFLOW);
L->elem = newbase;
L->listsize += LIST_INCREAMENT;
}
for (y = L->length - 1; y >= i; y--) {
*(L->elem+y + 1) = *(L->elem+y);
}
*(L->elem + i - 1) = a;
L->length++;
return OK;
}
Status ReviewList_Sq(SqList* L) {
int i;
int x=1;
if (!L->length) {
printf("空表!");
return (ERROR);
}
for (i = 0; i < L->length; i++) {
printf("第%2d个数据为%3d * ", i + 1, L->elem[i]);
if (x%4==0) printf("\n");
x++;
}
return OK;
}
Status Locate_Sq(SqList* L, ElemType x,int n, Status(*compare)(ElemType, ElemType)) {
int i;
int num = 0;
for (i = 0; i < L->length; i++) {
if (compare(L->elem[i],x)){
num++;
if (num == n) return i + 1;
}
}
return 0;
}