顺序表之静态储存
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 20
typedef struct{
int elem[MaxSize];
int length;
}SqList;
void InitList(SqList &L){
for(int i=0;i<MaxSize;i++)
L.elem[i]=rand()%100;
L.length=15;
};
void PrintList(SqList L){
for(int i=0;i<L.length;i++)
printf("elem[%d]=%d ",i,L.elem[i]);
}
int Length(SqList L){
return L.length;
}
bool Empty(SqList L){
if(L.length==0) return true;
else return false;
}
bool ListInsert(SqList &L,int i,int e){
if(i<1||i>L.length+1)
return false;
if(L.length>=MaxSize)
return false;
for(int j=L.length;j>i-2;j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
L.length++;
return true;
}
bool ListDelete(SqList &L,int i){
if((i<1)||(i>L.length))
return false;
for(int j=i;j<L.length-1;j++)
L.elem[j-1]=L.elem[j];
L.length--;
return true;
}
int GetElem(SqList L,int i){
if(i<1||i>L.length){
printf("查找位序不合法!");
return -1;
}
return L.elem[i-1];
}
int LocateElem(SqList L,int e){
for(int i=0;i<L.length;i++)
if(L.elem[i]==e)
return i+1;
return 0;
}
int main(){
int i1,j1;
SqList L;
InitList(L);
PrintList(L);
printf("\n查找第几个:");
scanf("%d",&i1);
j1 = GetElem(L,i1);
printf("第%d个元素是:%d\n",i1,j1);
printf("--------------------\n");
int i2,j2;
printf("查找哪个数在的位置:");
scanf("%d",&i2);
j2 = LocateElem(L,i2);
printf("这个数%d在第%d位置\n",i2,j2);
printf("--------------------\n");
int i3,j3,k3;
printf("你要在哪插入元素");
scanf("%d",&j3);
printf("你要插入什么元素");
scanf("%d",&k3);
ListInsert(L,j3,k3);
printf("\n插入后的顺序表\n");
PrintList(L);
printf("--------------------\n");
int i4,j4;
printf("你要删除哪个元素:");
scanf("%d",&i4);
ListDelete(L,i4);
printf("\n删除后的顺序表\n");
PrintList(L);
return 0;
}
顺序表之动态存储
#include<stdio.h>
#include<stdlib.h>
typedef struct table
{
int len;
int max;
int *array;
} List;
void InitList(List *L, int Max){
L->max = Max;
L->len = 0;
L->array = (int*)malloc(sizeof(int)*Max);
}
void PrintList(List *L){
printf("List:[");
for(int i=0;i<L->len;i++)
printf("%d,",L->array[i]);
printf("]");
}
void ListInsert(List *L, int index, int value){
if(L->len+1<=L->max){
for(int i=L->len;i>=index;i--)
L->array[i+1] = L->array[i];
L->array[index] = value;
L->len++;
}
}
void ListDelete(List *L, int index){
printf("删除的元素为:%d\n",L->array[index]);
for(int i=index;i<L->len;i++)
L->array[i] = L->array[i+1];
L->len--;
}
int Find(List *L, int index){
if(index < L->len) return L->array[index];
else return -1;
}
void Alter(List *L, int index, int value)
{
if(index < L->len)
L->array[index] = value;
}
int main()
{
List L1;
int max;
printf("L1最大有多少:");
scanf("%d",&max);
InitList(&L1,max);
printf("----------------\n");
int cha1;
printf("你要插入多少个元素");
scanf("%d",&cha1);
for(int i = 1;i<=cha1;i++){
int y = 0;
ListInsert(&L1,y,rand()%100);
y++;
}
printf("\n插入后的");
PrintList(&L1);
printf("\n--------------\n");
int shan1;
printf("你要删除下标为多少的元素:");
scanf("%d",&shan1);
ListDelete(&L1,shan1);
printf("\n删除后的");
PrintList(&L1);
printf("\n----------------\n");
int xiu1,sj1;
printf("你要修改下标为多少的元素:");
scanf("%d",&xiu1);
printf("你要修改成什么:");
scanf("%d",&sj1);
Alter(&L1,xiu1,sj1);
printf("修改后的");
PrintList(&L1);
return 0;
}