求计算机大神帮忙指点一下,用C语言写一个顺序表的数据结构题

2024-11-18 20:26:40
推荐回答(1个)
回答1:

#include
#include

_Bool isSorted(size_t arr[], size_t n){
for (int i = n-1; i>0; i--){
for (int j = 0; j if (arr[j]>arr[j + 1]) return 0;
}
}

return 1;
}

void iterator(size_t *pa, size_t n){
for (size_t i = 0; i printf("\n");
}

unsigned short int find(size_t *pa, size_t n, size_t e){
for (size_t i = 0; i
return 0;
}

void insert(size_t arr[], size_t n, size_t e){
arr[n-1]= e;
int t;
for (int i = n - 1; i>0; i--){
for (int j = 0; j if (arr[j]>arr[j + 1]){
t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
}
}

int main(){
size_t _max,*pa;
printf("输入数组大小:");
scanf("%d", &_max);
// 1)动态分配指定大小的内存单元
pa = (size_t*)calloc(_max, sizeof(size_t));
// 2)循环输入递增元素,构建顺序表(各元素用空格隔开或回车)
for (size_t i = 0; i < _max; i++) scanf("%d", (pa + i));
// 3)检查顺序表是否有序(此为升序)
while (1){
if (isSorted(pa, _max)) break;
printf("非递增,重新输入:");
for (size_t i = 0; i < _max; i++) scanf("%d", (pa + i));
}
// 4)遍历顺序表
iterator(pa, _max);
// 5)动态调整内存单元大小
_max += 1;
if ((pa = (size_t*)realloc(pa, _max*sizeof(size_t))) == NULL) {
printf("re-alloc memory error!");
exit(EXIT_FAILURE);
}
// 6)调整后再插入新元素并使其仍有序
insert(pa, _max, 50);
iterator(pa, _max);
// 7)动态调整顺序表内存大小为原有的2倍
_max *= 2;
if ((pa = (size_t*)realloc(pa, _max*sizeof(size_t))) == NULL) {
printf("re-alloc memory error!");
exit(EXIT_FAILURE);
}

// 8)释放动态申请的内存
free(pa);

system("PAUSE");
return 0;
}