#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int DataType;
typedef struct {
DataType* data; // 指针方法,动态内存分配,即用类似用data【】来保存了元素(整体),而不是用node来保存单个元素(链表)
unsigned int length, capacity;
} SeqList;
int CreateSeqList(SeqList* sl)
{
int i, elem;
sl->length = 0;
sl->capacity = 20;
for (i = 0; i < sl->capacity; i++)
{
scanf_s("%d", &elem);
if (elem != -1)
{
sl->data[i] = elem;
sl->length++;
}
else
break;
}
if (sl->length == 0) return 0;
else return 1;
}
void InitSeqListP(SeqList* sl, unsigned int capacity = 50)
{
sl->data = (int*)malloc(sizeof(sl->data));
sl->length = 0;
sl->capacity = capacity;
}
void PrintSeqList(SeqList* sl)
{
for (int i = 0; i < sl->length; i++)
printf("%d ", sl->data[i]);
printf("\n");
}
int InsertSeqList(SeqList* sl, int i, DataType x)
{
if (sl->length >= sl->capacity)
{
printf("上溢错误,插入失败\n");
return 0;
}
else if (i > sl->length + 1 || i < 1)
{
printf("插入位置错误,插入失败\n");
return 0;
}
else
{
for (int j = sl->length; j >= i; j--)
sl->data[j] = sl->data[j - 1];
sl->data[i - 1] = x;
sl->length++;
return 1;
}
}
int DelSeqList(SeqList* sl, int i, DataType* rtn)
{
if (sl->length == 0)
{
printf("下溢错误,删除失败\n");
return 0;
}
else if (i > sl->length || i < 1)
{
printf("删除位置错误,删除失败\n");
return 0;
}
else
{
*rtn = sl->data[i - 1];
for (int j = i; j < sl->length; j++)
sl->data[j - 1] = sl->data[j];
sl->length--;
return 1;
}
}
int InsertSeqListSorted(SeqList* sl, DataType x)
{
if (sl->length >= sl->capacity)
{
printf("上溢错误,插入失败\n");
return 0;
}
else
{
int i = 0;
for (; i < sl->length; i++)
{
if (x >= sl->data[i])
continue;
else if (x < sl->data[i])
break;
}
i = i + 1;//插入的位置
for (int j = sl->length; j >= i; j--)
sl->data[j] = sl->data[j - 1];
sl->data[i - 1] = x;
sl->length++;
return 1;
}
}
int main()
{
SeqList list;
InitSeqListP(&list, 50);
list.length = 0;
int ptr;
CreateSeqList(&list);
PrintSeqList(&list);
InsertSeqListSorted(&list, 6);
PrintSeqList(&list);
InsertSeqList(&list, 3, 99);
PrintSeqList(&list);
DelSeqList(&list, 5, &ptr);
PrintSeqList(&list);
printf("%d\n", ptr);
return 0;
}
如图,指针法处理顺序表的测试时,输入之后结果也有,但为什么会弹出这个啊,大学生一枚。