顺序表的实现

来源:互联网 发布:java实现下载断点续传 编辑:程序博客网 时间:2024/05/17 04:42
//顺序表的实现
#include<stdio.h>
#include<stdlib.h>
#define Initsize 100//线性表存储空间的初始分配量
#define Increment 10//线性表存储空间的分配增量
typedef int elemtype;//定义所用数据类型为int
typedef struct
{
elemtype *elem;//存储空间基地址
int length;//当前长度
int listsize;//当前分配的存储容量
}SqList;//线性表的动态分配顺序存储结构


int InitList(SqList *L);
void InputSqList(SqList *L);
void PrintSqList(SqList L);
int ListInsert(SqList *L);
void ListLocate(SqList L);
void ListDelete(SqList *L);


int main()
{
SqList L;
int status;
status=InitList(&L);//顺序表的初始化
if(status) printf("顺序表初始化成功!\n");
else { printf("顺序表初始化失败!\n");   return 0; }
InputSqList(&L);//顺序表的输入
PrintSqList(L);//顺序表的输出
status=ListInsert(&L);                                  //顺序表的插入
if(status) printf("自动插入成功!\n");
PrintSqList(L);
ListLocate(L);                                          //顺序表的查找
ListDelete(&L);                                         //顺序表的删除
PrintSqList(L);
free(L.elem);
return 1;
}


int InitList(SqList *L)                                     //顺序表的初始化
{
L->elem=(elemtype *)malloc(Initsize*sizeof(elemtype));
if(!L->elem) return 0;
L->length=0;
L->listsize=Initsize;
return 1;
}
void InputSqList(SqList *L)                                 //顺序表的输入
{
int a[10]={11,12,13,14,15,16,17,18,19,20};
int i;
for(i=0;i<10;i++)
L->elem[i]=a[i];
L->length=10;
printf("自动完成顺序表的输入\n");
}
void PrintSqList(SqList L)                                 //顺序表的输出
{
int i;
printf("该线性表的元素依次为:\n");
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
}
int ListInsert(SqList *L)                                  //顺序表的插入
{
int loc=5;
elemtype e=100;
elemtype *newbase;
int i;
if(loc<1||loc>L->length+1) { printf("插入的位置不合法\n"); return 0;}
if(L->length>=L->listsize)
{
newbase=(elemtype *)realloc(L->elem,(L->listsize+Increment)*sizeof(elemtype));
if(!newbase) { printf("插入时,重新分配空间错误\n"); return 0; }
L->elem=newbase;
L->listsize+=Increment;
}
for(i=L->length-1;i>=loc-1;i--)
L->elem[i+1]=L->elem[i];
L->elem[i+1]=e;
++L->length;
return 1;
}
void ListLocate(SqList L)                                   //顺序表的查找
{
int e=100;
int i;
for(i=0;i<L.length;i++)
if(L.elem[i]==e) break;
if(i!=L.length)
printf("%d所在的位置是%d\n",e,i+1);
else
printf("顺序表中没有相同的元素\n");
}
void ListDelete(SqList *L)                                  //顺序表的删除
{
int loc=5;
int i;
printf("删除第5个位置的元素\n");
for(i=loc-1;i<L->length;i++)
L->elem[i]=L->elem[i+1];
L->length--;
}
1 0
原创粉丝点击