顺序表的建立与运算
包括最大值,删除,插入,排序。
包括最大值,删除,插入,排序。
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR -1
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int Status;
typedef int ElemType;
//创建一个空的顺序表
typedef struct {
ElemType *elem;
int length;
int listsize;
}Sqlist;
//初始化顺序表
Status InitList(Sqlist&L)
{
L.elem=((ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)));
if(!L.elem)
return ERROR;
L.length=0;
L.listsize= LIST_INIT_SIZE;
return OK;
}
//取顺序表中的值
Status GetList(Sqlist&L)
{
int i;
printf("\n请输入线性表元素:");
for (i = 0; i <L.length; i++)
scanf("%d",&L.elem[i]);
printf("\n您输入的元素为:");
for(i=0;i<L.length;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
return OK;
}
//查找最大元素
Status GetMax(Sqlist&L)
{
int i;
int max=L.elem[0];
printf("\n元素的最大值为:");
for(i=1;i<L.length;i++)
{
if(max<L.elem[i])
{
max=L.elem[i];
}
}
printf("%d\n",max);
return OK;
}
//在线性表的第m个元素前插入一个正整数x
Status Insert(Sqlist&L,int m,int x)
{
int n;
for(n=L.length-1;n>=m-1;n--)
{
L.elem[n+1]=L.elem[n];
}
L.elem[m-1]=x;
L.length++;
return OK;
}
//删除线性表中的第j个元素
Status DeleteElem(Sqlist&L,int j)
{
int n;
for(n=j-1;n<L.length;n++)
{
L.elem[n]=L.elem[n+1];
}
L.length--;
return OK;
}
//排序
Status Sort(Sqlist&L)
{
int i;
int j;
for(i=0;i<L.length-1;i++)
{
for(j=i+1;j<L.length;j++)
{
if(L.elem[i]<L.elem[j])
{
int t;
t=L.elem[i];
L.elem[i]=L.elem[j];
L.elem[j]=t;
}
}
}
return OK;
}
//主函数
int main()
{
int i,n,x,m,a;
Sqlist L;
//创建一个线性表
InitList(L);
printf("请输入要添加的元素个数:");
scanf("%d",&L.length);
GetList(L);
//得出最大值
GetMax(L);
//插入元素
printf("\n在第m个前面插入元素:");
scanf("%d",&m);
printf("\n插入的元素x为:");
scanf("%d",&x);
Insert(L,m,x);
printf("\n插入后的元素为:");
for(i=0;i<L.length;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
//删除元素
printf("\n删除的元素是第n个:");
scanf("%d",&n);
DeleteElem(L,n);
printf("\n删除后的元素是:");
for(i=0;i<L.length;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
//元素排序
Sort(L);
printf("\n排序后的元素为:");
for(i=0;i<L.length;i++)
{
printf("%d ",L.elem[i]);
}
system("pause");
}