C语言版 顺序表的基本操作
#include<stdio.h>
#include <stdbool.h >
#include <stdlib.h>
#define InitSize 10
typedef struct{
int *data;
int MaxSize;
int length;
}SeqList;
void InitList(SeqList &L){
L.length=0;
L.MaxSize=InitSize;
L.data=(int *)malloc(sizeof(int)*InitSize);
}
int Length(SeqList L){
return L.length;
}
void PrintList(SeqList L){
for(int i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
printf("\n");
}
void IncreaseSize(SeqList &L,int len) {
int *p=L.data;
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
for(int i=0;i<L.length;i++){
L.data[i]=p[i];
}
L.MaxSize=L.MaxSize+len;
free(p);
}
bool ListInsert(SeqList &L,int i,int e){
if(i<1||i>L.length+1)
return false;
if(i>=L.MaxSize)
return false;
for(int j=L.length;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
return true;
}
bool ListDelete(SeqList &L,int m,int e){
if(m<1||m>L.length)
return false;
e=L.data[m-1];
for(int k=m;k<L.length;k++)
L.data[k-1]=L.data[k];
L.length--;
return false;
}
int LocateElem(SeqList L,int e){
for(int i=0;i<L.length;i++){
if(L.data[i]==e)
return i+1;
}
return -1;
}
int GetElem(SeqList L,int i){
return L.data[i-1];
}
int Empty(SeqList L){
return L.length==0? 1:0;
}
void DestroyList(SeqList &L){
free(L.data);
L.length=0;
L.MaxSize=0;
L.data=NULL;
}
int main(){
SeqList L;
InitList (L);
ListInsert(L,1,1);
ListInsert(L,2,2);
ListInsert(L,3,3);
ListInsert(L,4,4);
ListInsert(L,1,5);
ListInsert(L,2,6);
printf("线性表的当前长度:%d\n",L.length);
printf("L当前最大长度:%d\n",L.MaxSize);
PrintList(L);
IncreaseSize(L,5);
printf("4在顺序表中的位置为第%d个\n",LocateElem(L,4));
ListDelete(L,4,9);
printf("4在顺序表中的位置为第%d个\n",LocateElem(L,4));
printf("在顺序表中第4个位置为%d\n",GetElem(L,4));
printf ("The liner list of lentgh=%d\n",L.length);
PrintList(L);
ListInsert(L,3,8);
ListDelete(L,5,2);
Empty(L);
return 0;
}
[1]: http:
[2]: https:
[3]: https:
[4]: http:
|