1.顺序表的定义
typedef struct
{
int *elem;
int length;
int listSize;
}SqList;
2.顺序表的初始化
void SqListInit(SqList &L)
{
L.elem = (int *)malloc(sizeof(int)*InitSize);
if(!L.elem)
{
printf("SqList init error\n");
return;
}
L.length = 0;
L.listSize = InitSize;
}
3.顺序表的动态空间开辟
void SqListMallocSize(SqList &L,int len)
{
int *p = L.elem;
L.elem = (int *)malloc((L.listSize+len)*sizeof(int));
if(!L.elem)
{
printf("MallocSize error\n");
return;
}
for(int i = 0; i < L.length; i++)
{
L.elem[i] = p[i];
}
L.listSize += len;
free(p);
}
4.顺序表的插入
void SqListInsert(SqList &L,int index, int data)
{
if(L.length + 1 >= L.listSize)
{
SqListMallocSize(L,InitSize);
}
if(index < 1 || index > L.length+1)
{
printf("Insert fault: index illegal\n");
return;
}
for(int i = L.length; i >= index; i--)
{
L.elem[i] = L.elem[i-1];
}
L.elem[index-1] = data;
L.length++;
}
5.顺序表元素的删除
void SqListDel(SqList &L,int index)
{
if(index < 1 || index > L.length)
{
printf("Delete elem fault: index illegal\n");
return;
}
for(int i = index; i < L.length; i++)
{
L.elem[i-1] = L.elem[i];
}
L.length--;
}
6.元素或者位置的查找
6.1元素所在位序的查找
bool FindElemIndex(SqList L, int Elem, int &index)
{
for(int i = 0; i < L.length; i++)
{
if(L.elem[i] == Elem)
{
index = i+1;
return true;
}
}
printf("Elem was not find\n");
return false;
}
6.2根据位序查找元素
bool FindIndexElem(SqList L, int index, int &res)
{
if(index < 1 || index > L.length -1)
{
printf("FindIndexElem Fault: index error\n");
return false;
}
res = L.elem[index-1];
return true;
}
7.输出元素
7.1输出顺序表中所有元素
void SqListPrint(SqList &L)
{
for(int i = 0; i < L.length; i++)
{
printf("%d\n",L.elem[i]);
}
}
7.2输出长度及总大小
void SqListPrintElem(SqList &L)
{
printf("len:%d\nsize:%d\n",L.length,L.listSize);
}
8.总体演示
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define InitSize 10
typedef struct
{
int *elem;
int length;
int listSize;
}SqList;
void SqListInit(SqList &L)
{
L.elem = (int *)malloc(sizeof(int)*InitSize);
if(!L.elem)
{
printf("SqList init error\n");
return;
}
L.length = 0;
L.listSize = InitSize;
}
void SqListMallocSize(SqList &L,int len)
{
int *p = L.elem;
L.elem = (int *)malloc((L.listSize+len)*sizeof(int));
if(!L.elem)
{
printf("MallocSize error\n");
return;
}
for(int i = 0; i < L.length; i++)
{
L.elem[i] = p[i];
}
L.listSize += len;
free(p);
}
void SqListInsert(SqList &L,int index, int data)
{
if(L.length + 1 >= L.listSize)
{
SqListMallocSize(L,InitSize);
}
if(index < 1 || index > L.length+1)
{
printf("Insert fault: index illegal\n");
return;
}
for(int i = L.length; i >= index; i--)
{
L.elem[i] = L.elem[i-1];
}
L.elem[index-1] = data;
L.length++;
}
void SqListDel(SqList &L,int index)
{
if(index < 1 || index > L.length)
{
printf("Delete elem fault: index illegal\n");
return;
}
for(int i = index; i < L.length; i++)
{
L.elem[i-1] = L.elem[i];
}
L.length--;
}
bool FindIndexElem(SqList L, int index, int &res)
{
if(index < 1 || index > L.length -1)
{
printf("FindIndexElem Fault: index error\n");
return false;
}
res = L.elem[index-1];
return true;
}
bool FindElemIndex(SqList L, int Elem, int &index)
{
for(int i = 0; i < L.length; i++)
{
if(L.elem[i] == Elem)
{
index = i+1;
return true;
}
}
printf("Elem was not find\n");
return false;
}
void SqListPrint(SqList &L)
{
for(int i = 0; i < L.length; i++)
{
printf("%d\n",L.elem[i]);
}
}
void SqListPrintElem(SqList &L)
{
printf("len:%d\nsize:%d\n",L.length,L.listSize);
}
int main()
{
SqList L;
SqListInit(L);
for(int i = 0; i < 10; i++)
{
SqListInsert(L,i+1,i);
}
SqListInsert(L,5,10);
SqListPrint(L);
SqListPrintElem(L);
SqListDel(L,10);
SqListPrint(L);
SqListPrintElem(L);
int res = -1;
if(FindIndexElem(L,3,res))
{
printf("elem = %d\n",res);
}
int index = -1;
if(FindElemIndex(L,5,index))
{
printf("index = %d\n",index);
}
return 0;
}