美文网首页
顺序表C实现

顺序表C实现

作者: Dg_fc58 | 来源:发表于2019-08-12 23:33 被阅读0次

// 头文件

include <stdio.h>

include <stdlib.h>

define MAXSIZE 10

//结构的定义部分
const int INITSIZE=4;
const int INCREMENT=2;
typedef int ElemType;
//顺序存储结构
typedef struct{
ElemType *elem;
int length;
int listsize;
} SqList;

SqList A;
void InitList(SqList *L);//初始化
int ListLength(SqList L);
void ListOutput(SqList L);
void ListInfo(SqList L);
void ListInsert(SqList *L,int pos,ElemType e);//在i位置插入
void DeleteSqList(SqList *L,int local);
ElemType QuerySqList(SqList L,int pos);
void ModifySqList(SqList *L,int pos,ElemType e);

int main(){

printf("顺序表结构的测试:\n");

printf("***************************************\n");
printf("生成操作:InitList(A)\n");
InitList(&A);
ListInfo(A);

printf("***************************************\n");
printf("插入操作:ListInsert(A,1,1)\n");
ListInsert(&A,1,1);
ListInfo(A);

printf("***************************************\n");
printf("插入操作:ListInsert(A,2,2)\n");
ListInsert(&A,2,2);
ListInfo(A);
printf("***************************************\n");
printf("插入操作:ListInsert(A,2,2)\n");
ListInsert(&A,3,3);
ListInfo(A);
printf("***************************************\n");
printf("插入操作:ListInsert(A,2,2)\n");
ListInsert(&A,4,4);
ListInfo(A);
printf("***************************************\n");
printf("插入操作:ListInsert(A,2,2)\n");
ListInsert(&A,5,5);
ListInfo(A);

printf("***************************************\n");
printf("delete操作:ListInsert(A,3)\n");
DeleteSqList(&A,3);
ListInfo(A);

printf("delete操作:ListInsert(A,3)\n");
DeleteSqList(&A,3);
ListInfo(A);

printf("插入操作:ListInsert(A,4,500)\n");
ListInsert(&A,4,500);
ListInfo(A);

ElemType b=QuerySqList(A,4);
printf("query操作:%d\n",b);

ModifySqList(&A,1,100);
ListInfo(A);

return 0;

}
//结构的生成操作
void InitList(SqList *L)
{
printf("sizeof=%d\n",sizeof(L->elem));
L->elem=(int )malloc(INITSIZEsizeof(int));
if(!L->elem)
{
printf("init fail\n");
exit(0);
}
printf("sizeof=%d\n",sizeof(L->elem));
L->length=0;
L->listsize=INITSIZE;
printf("size=%d\n",L->listsize);
printf("init success\n");
}

int ListLength(SqList L)
{
return L.length;
}

void ListOutput(SqList L)
{
printf("(");
int i=0;
while(i<L.length-1){
printf("%d,",L.elem[i]);
i++;
}

//for(int i=0;i<L.length-1;i++){
// printf("%d,",L.elem[i]);
//cout<<L.elem[i]<<",";
//if(L.length-1>=0) cout<<L.elem[L.length-1];
//}
if(L.length-1>=0){
printf("%d",L.elem[L.length-1]);
}
printf(")\n");
}

void ListInfo(SqList L)
{
printf(" ");
ListOutput(L);
if(ListLength(L)==0) printf(" Empty:Yes\n");
else printf(" Empty:No\n");
printf(" Length=%d,Size=%d\n",ListLength(L),L.listsize) ;

}

void ListInsert(SqList *L,int pos,ElemType e)
{
printf("size=%d\n",L->length);
if(pos<1||pos>L->length+1) {
printf("pos is invalid \n");
exit(1);
};
if(L->length>=L->listsize)
{
ElemType *newbase=(ElemType )malloc((L->listsize+INCREMENT)sizeof(int));
//ElemType newbase[L->listsize+INCREMENT];
if(!newbase) {
exit(1);
}
printf("expand List\n");
int i=0;
while(i<L->length){
newbase[i]=L->elem[i];
i++;
}

// for(int i=0;i<L.length;i++){
// newbase[i]=L.elem[i];
// }
// delete [] L.elem;
L->elem=newbase;
L->listsize+=INCREMENT;
printf("expand List success\n");
}

int j=L->length-1;

printf("j=%d\n",j);
printf("L->length=%d\n",L->length);
while(j>=pos-1){
L->elem[j+1]=L->elem[j];
j--;
}

 printf("j=%d\n",j);

// for(int i=L.length-1;i>=pos-1;i--){
// L.elem[i+1]=L.elem[i];
// }
//printf("elem=%d\n",L->elem[pos-1]);
L->elem[pos-1]=e;
printf("length=%d\n",L->length);
L->length++;
printf("length=%d\n",L->length);
}

void DeleteSqList(SqList *L,int local){
int i=L->length;
if(local>i){
printf("非法位置\n");
}else if(local==i){
L->length--;
}else{
for(int j=local-1;j<L->length-1;j++){
L->elem[j]=L->elem[j+1];
}
L->length--;
}
}

ElemType QuerySqList(SqList L,int pos){
if(L.length>=pos){
return L.elem[pos-1];
}else{
printf("非法位置\n");
exit(0);
}

};

void ModifySqList(SqList *L,int pos,ElemType e){
if(L->length>=pos){
L->elem[pos-1]=e;
}else{
printf("非法位置\n");
exit(0);
}

}

相关文章

  • 顺序表C实现

    // 头文件 include include define MAXSIZ...

  • 顺序表及C实现

    逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为线性表的顺序存储结构 逻...

  • C++语言实现顺序表

    C++语言实现顺序表 顺序表的定义及其特点 顺序表的定义是:把线性表中的所有表项按照其逻辑顺序依次存储到从计算机存...

  • 「数据结构 一」C 语言实现顺序表

    作者原创,转载请注明出处。 个人博客:renzhe.name 用 C 语言实现顺序存储结构的线性表,即顺序表。 下...

  • 数据结构和算法(二)线性表(顺序存储)

    正文 书接上文,本文实现线性表的顺序存储逻辑。全文实行使用C语言进行。 1.顺序表的定义 2.顺序表初始化 3.顺...

  • 线性表之顺序表实现

    初始化顺序表 main.c SeqList.h SeqList.c 功能实现 main.c SeqList.c S...

  • 顺序表C语言实现

  • 顺序存储基本操作1

    顺序存储结构的常见操作,使用c语言实现1、定义 2、初始化 3、判断空表 4、判断是否已经满 5、顺序表长度 6、...

  • 顺序存储基本操作2

    顺序存储结构的常见操作,使用c语言实现 1、定义 2、初始化 3、判断空表 4、判断是否已经满 5、顺序表长度 6...

  • 2018-06-28顺序表结构和实现以及具体操作

    顺序表的结构与实现 真正在实现顺序表的时候要怎么操作? 顺序表在构建的时候还会有个表头信息。 一个顺序表的完整信息...

网友评论

      本文标题:顺序表C实现

      本文链接:https://www.haomeiwen.com/subject/jfkmjctx.html