一、顺序表 p18页
1.顺序表中删除最小值元素,假设唯一,并由函数返回被删元素值,空出位置由最后一个元素补充,若线性表为空,显示出错信息并推出!
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
typedef struct seqList {
int n;
int maxLength;
ElemType * element;
}SeqList;
int Init(SeqList* L,int mSize) {
L->maxLength = mSize;
L->n = 0;
L->element = (ElemType*)malloc(sizeof(ElemType) * mSize);
if (!L->element)
return 0;
return 1;
}
int Output(SeqList* L) {
int i;
if (!L->n)
return 0;
for ( i = 0; i <=L->n-1; i++)
{
printf("%d ", L->element[i]);
}
return 1;
}
int Insert(SeqList* L, int i, ElemType x) {
if (i<-1 || i>L->n - 1)
return 0;
if (L->n == L->maxLength)
return 0;
int j;
for ( j = L->n-1 ; j >i; j--)
{
L->element[j + 1] = L->element[j];
}
L->element[i + 1] = x;
L->n++;
return 1;
}
int Delete_MaxVlue(SeqList* L,int len) {
if (!L->n)
return 0;
int i;
int pos = 0;
int min = L->element[0];
for ( i = 0; i <L->n; i++)
{
if (L->element[i]<min) {
min = L->element[i];
pos = i;
}
}
L->element[pos] = L->element[len - 1];
L->n--;
return min;
}
int main() {
SeqList L;
int n = 10;
Init(&L, n);
int i;
for ( i = 0; i <n; i++)
{
Insert(&L, i-1,i+1);
}
Output(&L);
printf("表长为%d \n",n);
printf("删除元素为%d \n", Delete_MaxVlue(&L, n));
Output(&L);
return 0;
}
2.将顺序表元素逆置
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
#define MaxSize 10
typedef struct seqList {
int len;
ElemType element[MaxSize];
}SeqList;
void Init(SeqList* L,int n) {
int i=0;
L->len=n;
for ( i = 0; i < L->len ; i++)
{
L->element[i] = i + 1;
}
}
int Ouput(SeqList* L) {
int i;
if (!L->len)
return 0;
for (i = 0; i <= L->len - 1; i++)
{
printf("%d ", L->element[i]);
}
return 1;
}
int Invert(SeqList* L) {
if (!L->len)
return 0;
int i;
for ( i = 0; i <L->len/2; i++)
{
int temp= L->element[i];
L->element[i] = L->element[L->len -i-1];
L->element[L->len - i - 1] = temp;
}
}
int main(void) {
SeqList L;
Init(&L,5);
printf("原数组:");
Ouput(&L);
printf("\n");
printf("逆置后数组:");
Invert(&L);
Ouput(&L);
return 0;
}