//线性表存储结构 CHX 2012-10-15
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
typedef int ElemType;
typedef struct
{
ElemType * elem;
int len;//当前长度
int listsize;//顺序表容量(sizeof类型)
}sqlist;
int Init_Sq(sqlist * L,int n)//初始化,构造一个空的线性表
{
L->elem = (ElemType *)malloc(sizeof(ElemType)*n);//注意此处是ElemType!!
if(L->elem == NULL)
{
printf("数据空间分配失败!\n");
return 0;
}
L->len = 0;
L->listsize = n;
return 1;
}
bool Empty_Sq(sqlist L)
{
if(L.len == 0)
return true;
else
return false;
}
bool Full_Sq(sqlist L)
{
if(L.len == L.listsize)
return true;
else
return false;
}
void Destroy_Sq(sqlist *L)
{
free(L->elem);
L->elem = NULL;
L->listsize=0;
L->len = 0;
}
void Clear_Sq(sqlist *L)
{
L->len = 0;
}
void Traverse_Sq(sqlist *L)
{
int i;
for(i=0;i < L->len;i++)
printf("%d\n",L->elem[i]);//注意L->elem的含义。相当于数据A[n]中的A??
printf("\n");
}
int Insert_Sq(sqlist *L,int i,int e)//在队列中的第i个位置之前插入新的元素e
{
int j;
if(Full_Sq( *L))
{
printf("空间已满\n");
return 0;
} ;
if(i > L->len||i < 1)
{
printf("要插出入的位置不对!\n");
return 0;
}
for(j=L->len;j>=i;j--)
L->elem[j]=L->elem[j-1];
L->elem[i-1]=e;
L->len++;
return 1;
}
int Del_Sq(sqlist *L,int i)
{
int j;
if(Empty_Sq( *L))
{
printf("空间已空\n");
return 0;
}
if(i > L->len||i < 1)
{
printf("要删除的位置不对!\n");
return 0;
}
for(j=i-1;j<L->len;j++)
L->elem[j] = L->elem[j+1];
L->len--;
return 1;
}
void Sort_Sq(sqlist *L,int n)
{
int i,j,min,t;
for(i = 0;i<n;i++)
for(j = i;j<n;j++)
{
if( L->elem[j] <= L->elem[i])
{
t = L->elem[j];
L->elem[j] =L->elem[i];
L->elem[i] = t;
}
}
}
int main(void)
{
srand( (unsigned)time( NULL ) ); //初始化随机数
sqlist pa;
int i;
Init_Sq( &pa, 8);
pa.len = 6;
for(i=0;i<6;i++)
{
pa.elem[i]=( rand()%10 + 1);//产生随机数
}
Traverse_Sq(&pa);
Insert_Sq(&pa,3,20);
Traverse_Sq(&pa);
Del_Sq(&pa,4);
Traverse_Sq(&pa);
Sort_Sq(&pa,6);
Traverse_Sq(&pa);
return 0;
}