📄 顺序表.c
字号:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define INCREACE 10
#define SIZE 100
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
Inital(Sqlist *L,int m){
L=(Sqlist*)malloc(sizeof(Sqlist));
if(!L) exit(0);
L->elem=(int *)malloc(SIZE*sizeof(int));
if(!L->elem) exit(0);
int i=0;
for(i;i<m;i++){
L->elem[i]=i+1;
}
L->length=m;
L->listsize=SIZE;
}
Destroy(Sqlist *L){
L->elem=NULL;
L->length=0;
L->listsize=0;
free(L);
}
Clear(Sqlist *L){
L->elem=NULL;
L->length=0;
L->listsize=0;
}
int ListIsEmpty(Sqlist *L){
if(L->length==0){
return 0;
}else return 1;
}
int Listlength(Sqlist *L){
return L->length;
}
int GetElem(Sqlist *L,int i){
if(i<1||i>L->length) exit(0);
int e=*(L->elem+i-1);
return e;
}
ListInsert(Sqlist *L,int i,int e){
if(i<1||i>L->length) exit(0);
if(L->length>=L->listsize){
int *new=(int *)realloc(L->elem,(L->listsize+INCREACE)*sizeof(int));
if(new==NULL) exit(0);
L->elem=new;
L->listsize+=INCREACE;
}
int *q=&(L->elem[i-1]);
int *p=&(L->elem[L->length-1]);
for(p;p>=q;--p)
*(p+1)=*p;
*q=e;
++L->length;
}
Listdelete(Sqlist *L,int i){
int *p,*q;
if(i<1||i>L->length) exit(0);
p=&(L->elem[i-1]);
q=&(L->elem[L->length-1]);
for(++p;p<=q;++p)
*(p-1)=*p;
L->length--;
}
main(int argc, char *argv[])
{ Sqlist *L=Inital(L,10);
//插入值
ListInsert(L,2,25);
//输出插入后的顺序表
int i=0;
int *p=L->elem;
printf("插入数值后的顺序表:");
for(i;i<L->length;i++)
{printf("%3d",*p++);}
printf("\n");
//删除值
Listdelete(L,4);
//输出删除后的顺序表
int j=0;
int *q=L->elem;
printf("删除数值后的顺序表:");
for(j;j<L->length;j++)
{printf("%3d",*q++);}
printf("\n");
//输出指定位置的元素
printf("The six element is %d\n",GetElem(L,6));
//判断表是否为空
printf("This List has element? %d\n",ListIsEmpty(L));
//输出操作后的表长和表的最大容量
printf("经过各个操作后的顺序表长度和最大容量分别为:");
printf("%d %d\n",Listlength(L),L->listsize);
system("pause");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -