#include <stdio.h>
#include <stdlib.h>
// 线性表的顺序存储结构
#define ListSize 100
typedef char DataType;
typedef struct{
DataType data[ListSize];
int length;
}SeqList;
SeqList mylist;//global value
//在指定位置插入元素
void InsertList(SeqList *L,int pos,DataType val)
{
int i,q=0;
if(pos<1 || pos>L->length+1) // 假如顺序表为 1,2,3,4,5,可以插入的位置是1,2,3,4,5,6
{
printf("position error\n");
return;
}
if(L->length>=ListSize){ //当length=ListSize时,表示顺序表已满
printf("overflow\n");
return;
}
for( i=L->length ;i>=pos;i--){ //当i的位置为1——length+1时需要移动length-i+1
L->data[i]=L->data[i-1];
q++;
}
L->data[pos-1]=val;
printf("循环体执行了%d次,理论上计算值为n-i+1次%d\n",q,L->length-pos+1);
L->length ++;
printf("在顺序表中插入新的元素%c在表中%d的位置",val,pos);
}
DataType DeleteList(SeqList *L,int pos)//在顺序表L中第i个位置之前插入一个新的元素下
{
int i,q=0;
DataType x;
if(pos<1 || pos>L->length)
{
printf("position error\n");
exit (0); //程序非正常退出,并给一个统一的返回值0,在stdlib.h中有定义
}
x=L->data[pos-1];
/* for(i=pos-1;i+1<L->length ;i++){
q++;
L->data[i]=L->data[i+1];
}
*/
for(i=pos;i<L->length;i++) {
q++;
L->data[i-1]=L->data[i];
}
L->length --;
printf("表中位置%d的元素%c已经被删除了\n",pos,x);
printf("循环体执行了%d次,理论上计算值为n-i次%d\n",q,L->length+1-pos);
return x;
}
void PrintList(SeqList *L) //打印输出顺序表
{
int i;
for(i=0;i<L->length;i++){
printf("%c,",L->data[i]);
}
printf("\n");
}
//创建一个顺序表
CreateList(SeqList *L)
{
int i=0;
L->length=0;
char ch;
ch=getchar();
printf("创建的顺序表如下:");
while(ch!='\n'){
L->data[i]=ch;
L->length++;
ch=getchar();
printf("%c,",L->data[i]);
i++;
}
printf("表长length=n=%d\n",L->length);
}
//顺序表逆置
void Converts(SeqList *L){
int i;
DataType temp;
for(i=0;i<L->length/2;i++)
{
temp=L->data[i];
L->data[i]=L->data[L->length-1-i];
L->data[L->length-1-i]=temp;
}
return;
}
void MaxMin(SeqList *L,DataType*max,DataType *min,int *k,int *j){
int i;
*max=L->data[0];*min=L->data[0];
*k=*j=0;
for(i=1;i<L->length;i++) {
if(L->data[i]>*max){
*max=L->data[i];*k=i;
}
else if (L->data[i]<*min){
*min=L->data[i];*j=i;
}
}
}
int main()
{
int max=0,min=0,k=0,j=0;
CreateList(&mylist);
InsertList(&mylist,9,'A');
PrintList(&mylist);
DeleteList(&mylist,9);
PrintList(&mylist);
Converts(&mylist);
PrintList(&mylist);
MaxMin(&mylist,&max,&min,&k,&j);
printf("max=%c,min=%c,k=%d,j=%d",max,min,k,j);
return 0;
}