运行结果如图:
运行程序源码:
//
// Created by Dalin Liang on 2019/11/18.
//
#include <stdio.h>
#include <stdlib.h>
typedef int DataType; /*将int型数据重新定义*/
struct SeqList { /*自定义结构体*/
int max;
int n;
DataType *element;
};
typedef struct SeqList SeqList; /*重新定义数据类型*/
typedef SeqList *PSeqList;
PSeqList creatNullList_seq(int max) { /*创建空顺序表F*/
PSeqList pSeqList = (PSeqList) malloc(sizeof(SeqList));
if (pSeqList != NULL) {
pSeqList->element = (DataType *) malloc(sizeof(DataType) * max);
if (pSeqList->element) {
pSeqList->max = max;
pSeqList->n = 0;
return pSeqList;
} else free(pSeqList);
}
printf("Out of space!/n");
return NULL;
}
int isNullList_seq(PSeqList pSeqList) { /*判断线性表是否为空F*/
if (pSeqList->n == 0)
return 1;
else
return 0;
}
int insert_seq(PSeqList pSeqList, DataType dataType) {
pSeqList->element[pSeqList->n] = dataType;
pSeqList->n = pSeqList->n + 1;
return 1;
}
int locateV_seq(PSeqList pSeqList, DataType dataType) { /*按值查找下标F*/
for (int q = 0; q < pSeqList->n; q++) {
if (pSeqList->element[q] == dataType)
return q;
}
return -1;
}
int insertPre_seq(PSeqList pSeqList, int p, DataType dataType) { /*将数据插入到下标为p元素之前F*/
int q;
if (pSeqList->n >= pSeqList->max) {
printf("Overflow!/n");
return 0;
}
if (p < 0 || p > pSeqList->n) {
printf("Not exist!/n");
return 0;
}
for (q = pSeqList->n - 1; q >= p; q--) {
pSeqList->element[q + 1] = pSeqList->element[q];
}
pSeqList->element[p] = dataType;
pSeqList->n = pSeqList->n + 1;
return 1;
}
int insertPost_seq(PSeqList pSeqList, int p, DataType dataType) { /*将数据插入到下标为p元素之后F*/
int q;
if (pSeqList->n >= pSeqList->max) {
printf("Overflow!/n");
return 0;
}
if (p < 0 || p > pSeqList->n) {
printf("Not exist!/n");
return 0;
}
for (q = pSeqList->n - 1; q > p; q--) {
pSeqList->element[q + 1] = pSeqList->element[q];
}
pSeqList->element[q + 1] = dataType;
pSeqList->n = pSeqList->n + 1;
return 1;
}
int deleteP_seq(PSeqList pSeqList, int p) { /*删除指定下标元素F*/
int q;
if (p < 0 || p > pSeqList->n - 1) {
printf("Not exist!\n");
return 0;
}
for (q = p; q < pSeqList->n - 1; q++) {
pSeqList->element[q] = pSeqList->element[q + 1];
}
pSeqList->n = pSeqList->n - 1;
return 1;
}
int deleteV_seq(PSeqList pSeqList, DataType dataType) { /*删除指定值元素F*/
int temp = locateV_seq(pSeqList, dataType);
if (deleteP_seq(pSeqList, temp)) {
return 1;
} else {
return 0;
}
}
int extend_seq(PSeqList pSeqList) { /*扩展顺序表max*2F*/
DataType *pos1 = (DataType *) malloc(sizeof(DataType) * pSeqList->max * 2);
if (pos1 == NULL) {
printf("Overflow!/n");
return 0;
}
for (int q = 0; q < pSeqList->max; q++) {
pos1[q] = pSeqList->element[q];
}
free(pSeqList->element);
pSeqList->element = pos1;
pSeqList->max *= 2;
return 1;
}
void output_seq(PSeqList pSeqList) { /*将数组输出函数*/
printf("当前的存储元素为:");
for (int i = 0; i < pSeqList->n; i++) {
printf("%d ", pSeqList->element[i]);
}
printf("\n");
}
int main() {
int max, locate_P, locate;
PSeqList pSeqList;
DataType locate_V, dataType, dataTypeLocate;
printf("请输入你需要建立顺序表的大小(数据单位):");
scanf("%d", &max);
pSeqList = creatNullList_seq(max);
if (isNullList_seq(pSeqList)) {
printf("创建成功!此时顺序表为空,请输入元素,以-1结束:");
}
for (int q = 0; q <= pSeqList->max; q++) {
scanf("%d", &dataType);
if (dataType != -1) {
insert_seq(pSeqList, dataType);
} else
break;
}
output_seq(pSeqList);
printf("请输入你需要查找元素的下标:");
scanf("%d", &locate_P);
printf("元素的值为:%d\n", pSeqList->element[locate_P]);
printf("请输入你需要查找下标元素的值:");
scanf("%d", &locate_V);
printf("元素的下标为:%d\n", locateV_seq(pSeqList, locate_V));
printf("请输入你需要在插入在该元素前元素的下标以及需要插入的数值:");
scanf("%d%d", &locate, &dataType);
insertPre_seq(pSeqList, locate, dataType);
output_seq(pSeqList);
printf("请输入你需要在插入在该元素后元素的下标以及需要插入的数值:");
scanf("%d%d", &locate, &dataType);
insertPost_seq(pSeqList, locate, dataType);
output_seq(pSeqList);
printf("请输入你需要删除元素的下标:");
scanf("%d", &locate);
deleteP_seq(pSeqList, locate);
output_seq(pSeqList);
printf("请输入你需要删除元素的值:");
scanf("%d", &dataTypeLocate);
deleteV_seq(pSeqList, dataType);
output_seq(pSeqList);
printf("扩展前max=%d\n", pSeqList->max);
extend_seq(pSeqList);
printf("扩展后max=%d\n", pSeqList->max);
return 0;
}