线性表
顺序表
静态数组定义的顺序表
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct{
int data[MAXSIZE];
int length;
}SqList;
void InitList(SqList &L);
bool Empty(SqList L);
int Length(SqList L);
void PrintList(SqList L);
bool ListInsert(SqList &L,int i,int e);
bool ListDelect(SqList &L,int i,int &e);
bool Delect(SqList &L,int i);
int GetElem(SqList L,int i);
int LoacateElem(SqList L,int e);
int main()
{
SqList L;
InitList(L);
printf("---------------------------\n");
if(Empty(L))
{
printf("表非空\n");
}
else
{
printf("表为空\n");
}
printf("---------------------------\n");
printf("插入数据后:\n");
ListInsert(L,1,1);
ListInsert(L,2,2);
ListInsert(L,3,3);
ListInsert(L,4,4);
PrintList(L);
printf("---------------------------\n");
printf("表长为:%d\n",Length(L));
if(Empty(L))
{
printf("表非空\n");
}
else
{
printf("表为空\n");
}
printf("---------------------------\n");
printf("---带返回值的删除---\n");
int e = 0;
ListDelect(L,4,e);
printf("删除的元素值为:%d\n",e);
PrintList(L);
printf("---不带返回值的删除---\n");
Delect(L,3);
PrintList(L);
ListInsert(L,3,3);
ListInsert(L,4,4);
ListInsert(L,5,5);
ListInsert(L,6,6);
printf("---------------------------\n");
int i = 5;
printf("按位查找:第%d位的元素为%d\n",i,GetElem(L,i));
printf("---------------------------\n");
e = 5;
printf("按值查找:值为%d的元素在第%d位\n",e,LoacateElem(L,e));
return 0;
}
void InitList(SqList &L)
{
for(int i;i < MAXSIZE;i++)
{
L.data[i] = 0;
}
L.length = 0;
}
int Length(SqList L)
{
return L.length;
}
bool Empty(SqList L)
{
return L.length;
}
void PrintList(SqList L)
{
for(int i = 0;i < L.length;i++)
{
printf("第%d位数据为:%d\n",i + 1,L.data[i]);
}
}
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;j--)
{
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;
L.length ++;
return true;
}
bool ListDelect(SqList &L,int i,int &e)
{
if(i < 1 || i > L.length)
{
return false;
}
e = L.data[i - 1];
for(int j = i;j < L.length;j++)
{
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
bool Delect(SqList &L,int i)
{
if(i < 1 || i > L.length)
{
return false;
}
for(int j = i;j < L.length;j++)
{
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
int GetElem(SqList L,int i)
{
if(i > L.length)
{
return false;
}
return L.data[i - 1];
}
int LoacateElem(SqList L,int e)
{
for(int i = 0;i < L.length;i++)
{
if(L.data[i] == e)
{
return (i + 1);
}
}
return 0;
}
动态数组定义的顺序表
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct{
int *data;
int MaxSize;
int length;
} SqList;
void InitList(SqList &L);
bool Empty(SqList L);
int Length(SqList L);
void PrintList(SqList L);
bool ListInsert(SqList &L,int i,int e);
bool ListDelect(SqList &L,int i,int &e);
bool Delect(SqList &L,int i);
void IncreaseSize(SqList &L,int len);
int GetElem(SqList L,int i);
int LoacateElem(SqList L,int e);
void DestroyList(SqList &L);
int main()
{
SqList L;
InitList(L);
printf("---------------------------\n");
if(Empty(L))
{
printf("表非空\n");
}
else
{
printf("表为空\n");
}
printf("---------------------------\n");
printf("插入数据后:\n");
ListInsert(L,1,1);
ListInsert(L,2,2);
ListInsert(L,3,3);
ListInsert(L,4,4);
PrintList(L);
printf("---------------------------\n");
printf("表长为:%d\n",Length(L));
if(Empty(L))
{
printf("表非空\n");
}
else
{
printf("表为空\n");
}
printf("---------------------------\n");
printf("---带返回值的删除---\n");
int e = 0;
ListDelect(L,4,e);
printf("删除的元素值为:%d\n",e);
PrintList(L);
printf("---不带返回值的删除---\n");
Delect(L,3);
PrintList(L);
ListInsert(L,3,3);
ListInsert(L,4,4);
ListInsert(L,5,5);
ListInsert(L,6,6);
printf("---------------------------\n");
int i = 5;
printf("按位查找:第%d位的元素为%d\n",i,GetElem(L,i));
printf("---------------------------\n");
e = 5;
printf("按值查找:值为%d的元素在第%d位\n",e,LoacateElem(L,e));
DestroyList(L);
return 0;
}
void InitList(SqList &L)
{
L.data = (int *) malloc (MAXSIZE * sizeof(int));
L.length = 0;
L.MaxSize = MAXSIZE;
}
void IncreaseSize(SqList &L,int len)
{
int *p = L.data;
L.data = (int *) malloc ((MAXSIZE + len) * sizeof(int));
for(int i = 0;i < L.length;i++)
{
L.data[i] = p[i];
}
L.MaxSize += len;
free(p);
}
int Length(SqList L)
{
return L.length;
}
bool Empty(SqList L)
{
return L.length;
}
void PrintList(SqList L)
{
for(int i = 0;i < L.length;i++)
{
printf("第%d位数据为:%d\n",i + 1,L.data[i]);
}
}
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;j--)
{
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;
L.length ++;
return true;
}
bool ListDelect(SqList &L,int i,int &e)
{
if(i < 1 || i > L.length)
{
return false;
}
e = L.data[i - 1];
for(int j = i;j < L.length;j++)
{
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
bool Delect(SqList &L,int i)
{
if(i < 1 || i > L.length)
{
return false;
}
for(int j = i;j < L.length;j++)
{
L.data[j - 1] = L.data[j];
}
L.length--;
return true;
}
int GetElem(SqList L,int i)
{
if(i > L.length)
{
return false;
}
return L.data[i - 1];
}
int LoacateElem(SqList L,int e)
{
for(int i = 0;i < L.length;i++)
{
if(L.data[i] == e)
{
return (i + 1);
}
}
return 0;
}
void DestroyList(SqList &L)
{
L.data = 0;
L.MaxSize = 0;
free(L.data);
}