|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int ElemType;
typedef int Status;
typedef struct
{
ElemType data[MAXSIZE];
int length; // 线性表当前长度
} sqlist;
// 初始条件:顺序线性表L已存在,1 <= i <= ListLength(L)
// 操作结果:用e返回L中第i个数据元素的值
Status GetElem(sqlist *L, int i, ElemType *e)
{
if( L->length==0 || i<1 || i>L->length )
{
return ERROR;
}
*e = L->data[i-1];
return OK;
}
// 初始条件:顺序线性表L已存在,1<= i <= ListLength(L)
// 操作结果:在L中第i个位置之前插入新的数据元素e,L长度+1
Status ListInsert(sqlist *L, int i, ElemType e)
{
int k;
if( L->length == MAXSIZE ) // 顺序线性表已经满了
{
return ERROR;
}
if( i<1 || i>L->length+1) // 当i不在范围内
{
return ERROR;
}
if( i <= L->length ) // 若插入数据位置不在表尾
{
// 将要插入位置后数据元素向后移动一位
for( k=L->length-1; k >= i-1; k-- )
{
L->data[k+1] = L->data[k];
}
}
L->data[i-1] = e; // 将新元素插入
L->length++;
return OK;
}
/* 初始条件:顺序线性表L已存在,1<=i<=ListLength(L) */
/* 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度-1 */
Status ListDelete(sqlist *L, int i, ElemType *e)
{
int k;
// 判断是否是空表
if( L->length == 0 )
{
return ERROR;
}
// 判断删除元素位置是否不合法
if( i<1 || i>L->length )
{
return ERROR;
}
// 数组从0开始,i位置对应索引-1,记住
*e = L->data[i-1];
if( i < L->length )
{
// 循环,向前移动1位
for( k=i; k < L->length; k++ )
{
L->data[k-1] = L->data[k];
}
}
// 删除一次成功,表长减1
L->length--;
return OK;
}
void creatlist(sqlist *L,int n)
{
int i;
srand(time(0));
for(i=0;i<n;i++)
{
L->data[i]=rand()%100+1;
}
L->length=n;
}
void listoutput(sqlist*L)
{
int i;
for(i=0;i<L->length;i++)
printf(" %d",L->data[i]);
printf("\n");
}
void listSelectSort(sqlist*L) // 这个函数语法和逻辑看似没有问题,运行时却不能实现对线性表元素的排序,原因不明
{
int i,j,min;
sqlist temp;
for(i=0;i<L->length-1;i++)
{
min=i;
for(j=i+1;j<L->length;j++)
if(L[j].data<L[i].data)
min=j;
if(min!=i)
{
temp=L[i];
L[i]=L[j];
L[j]=temp;
}
}
}
Status getmidnode(sqlist*L)
{
int f,e;
e=(int)L->length/2;
f=L->data[e];
printf("%d\n",f);
return OK;
}
void main()
{
sqlist L[MAXSIZE];
int n,opp,i,m;
ElemType e;
printf("\n 1.创建线性表\n 2.查看线性表\n 3.所有元素从小到大进行排序\n 4.线性表中间元素\n 5.查看线性表中某一元素的值\n 6.插入元素\n 7.删除元素\n 0.退出\n 请输入你的选择\n");
while(opp)
{
scanf("%d",&opp);
switch(opp)
{
case 1:
printf("输入要创建的线性表的元素个数(不超过20个):\n");
scanf("%d",&n);
if(n>20||n<1)
{
printf("请重新输入:\n");
scanf("%d",&n);
}
creatlist(L,n);
listoutput(L);
printf("\n");
break;
case 2:
listoutput(L);
printf("\n");
break;
case 3:
printf("所有元素从小到大排列为:\n");
listSelectSort(L);
listoutput(L);
printf("\n");
break;
case 4:
getmidnode(L);
printf("\n");
break;
case 5:
printf("输入要查看的元素的位置:\n");
scanf("%d",&i);
GetElem(L,i,&e);
printf("该位置的元素为:%d\n",e);
printf("\n");
break;
case 6:
printf("请输入要插入的位置(1<=i<=20):\n");
scanf("%d",&i);
printf("请输入要插入的元素:\n");
scanf("%d",&m);
ListInsert(L,i,m);
listoutput(L);
printf("\n");
break;
case 7:
printf("请输入你要删除的元素的位置(1<=i<=20):\n");
scanf("%d",&i);
ListDelete(L,i,&e);
printf("删除的元素为:%d\n", e);
listoutput(L);
printf("\n");
break;
case 0:
exit(0);
}
}
}
|
|