您的位置:首页 > 其它

顺序表

2015-09-08 23:26 344 查看
#include "stdio.h"
#include "malloc.h"
#define MAXSIZE 10
#define ADDSIZE 5
typedef int ElemType;

typedef struct{
ElemType *elem;
int length;
int size;
}SqList;

void InitList(SqList *L){
L->elem=(ElemType *)malloc(MAXSIZE * sizeof(ElemType));
if(L!=NULL){
(*L).length=0;
(*L).size=MAXSIZE;
printf("内存分配成功!\n");
}else{
printf("内存分配失败!\n");
}
}
int ListInsert(SqList *L,int i,ElemType e){
int j;
if(i<1||i>(*L).length+1){
ElemType * newElem;
int k;
newElem = (ElemType *)malloc((L->size+ADDSIZE)*sizeof(ElemType));
for(k=0;k<L->length;k++){
newElem[k]=L->elem[k];
}
L->elem = newElem;
L->size=L->size+ADDSIZE;

}
i--;
for(j=L->length;j>i;j--){
L->elem[j]=L->elem[j-1];
}
L->elem[i]=e;
L->length++;
return 1;
}
void ListTraverse(SqList *L){
int i;
if(ListEmpty(L)){
return ;
}
for(i=0;i<L->length;i++){
printf("%d\t",L->elem[i]);
}
printf("\n");
}
int ListEmpty(SqList *L){
return (L->length==0);
}
int ListLength(SqList *L){
return (L->length);
}
int ListSize(SqList *L){
return L->size;

}

ElemType GetElement(SqList *L,int i){
ElemType e=0;
if(i<1||i>L->length){
return e;
}
e=L->elem[i-1];
return e;

}
int LocateElement(SqList *L,int i){
ElemType e=0;
if(i<1||i>L->length){
return e;
}
e=L->elem[i-1];
return e;
}
void ClearList(SqList *L){
L->length=0;
}
void DestroyList(SqList *L){
free(L->elem);
L->length=0;
L->size=0;

}

int PutElement(SqList *L,int i,ElemType newValue){

int j;
for(j=0;j<L->length;j++){
if(i==j+1){
L->elem[j]=newValue;
return 1;
}
}
return 0;

}
int ListDelete(SqList *L,int i){
int j;
if(i<1||i>L->length){
return 0;
}
i--;
for(j=i;j<L->length-1;j++){//向后移动指针域
L->elem[j]=L->elem[j+1];
}
L->length--;//总长度少一
return 1;
}
main(){
int i;
SqList L;
ElemType e;
printf("初始化线性表:\n");
InitList(&L);
printf("插入数据:\n");
for(i=1;i<=10;i++){
ListInsert(&L,i,10-i);
}
printf("遍历数据;\n");
ListTraverse(&L);

printf("删除第五个位置的元素\n");
ListDelete(&L,5);
ListTraverse(&L);
//修改第五个元素为
PutElement(&L,5,1);

if(!ListEmpty(&L)){
printf("顺序表不为空\n");
}
printf("顺序表的长度为:%d\n",ListLength(&L));
printf("顺序表的当前容量为:%d\n",ListSize(&L));
printf("顺序表第三个位置的元素为:%d\n",GetElement(&L,3));

printf("8在线性表中的位置为:%d\n",LocateElement(&L,8));

ClearList(&L);

printf("现在顺序表的长度为:%d\n",ListLength(&L));//为0
printf("现在顺序表的当前容量为:%d\n",ListSize(&L));//不为0
//释放线性表
DestroyList(&L);
printf("已销毁!\n");

ListTraverse(&L);
printf("现在顺序表的当前容量为:%d\n",ListSize(&L));//销毁之后为0

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: