#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
/*
编程实现:利用数组顺序表的形式完成建表、插入、删除、倒置、排序、输出等操作
*/
typedef struct List{
int data[MaxSize];
int length;
}*SeqList;
//初始化
void InitList(SeqList& l) {
l = (SeqList)malloc(sizeof(List));
if(l!=NULL)l->length = 0;
}
//创建顺序表
void CreateList(SeqList& l, int data[], int length) {
InitList(l);
int i;
for ( i = 0; i < length; i++)
{
l->data[i] = data[i];
}
l->length=length;
}
bool ElemInsert(SeqList& l, int i, int e) {
if (i<1 || i>l->length + 1) return false;
if (i > MaxSize) return false;
for (int j = l->length; j >= i; j--)
{
l->data[j] = l->data[j - 1];
}
l->data[i - 1] = e;
l->length++;
return true;
}
//删除第i个元素
bool ElemDelete(SeqList& l, int i) {
if (l->length == 0) return false;
int j;
for ( j = i; j< l->length; j++)
{
l->data[j-1] = l->data[j];
}
l->length--;
return true;
}
void reverseList(SeqList& l) {
int temp = 0;
for (int i = 0; i < l->length/2; i++)
{
temp =l->data[i] ;
l->data[i] = l->data[l->length - i - 1];
l->data[l->length-i-1] = temp;
}
}
void sortList(SeqList& l) {
int i, j, k,temp;
for ( i = 0; i < l->length-1; i++)
{
k = i;
for (j = i + 1; j < l->length; j++) {
if (l->data[k]>l->data[j])
{
k = j;
}
}
temp = l->data[i];
l->data[i] = l->data[k];
l->data[k] = temp;
}
}
//输出
void printList(SeqList l) {
for (int i = 0; i < l->length; i++)
{
printf("%d\t", l->data[i]);
}
printf("\n");
}
int main() {
SeqList l;
int data[6] = { 1,2,3,4,5,6 };
//创建表
CreateList(l, data, 6);
printList(l);
//插入元素
ElemInsert(l, 3, 9);
printList(l);
//删除元素
ElemDelete(l, 2);
printList(l);
//倒置表
reverseList(l);
printList(l);
//排序
sortList(l);
printList(l);
}