一、 静态分配的顺序表
1.1 数据元素的定义
# define MaxSize 50
typedef struct{
ElemType data[MaxSize];
int length;
}SqList;
1.2 初始化顺序表操作
#include<stdio.h>
# define MaxSize 50
typedef struct{
int data[MaxSize];
int length;
}SqList;
void InitList(SqList &L){
for(int i=0;i<MaxSize;i++){
L.data[i]=0;
}
L.length=0;
}
int main()
{
SqList L;
InitList(L);
return 0;
}
1.3 插入元素操作
#include<stdio.h>
# define MaxSize 50
typedef struct{
int data[MaxSize];
int length;
}SqList;
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;
}
1.4 按位删除元素操作
#include<stdio.h>
# define MaxSize 50
typedef struct{
int data[MaxSize];
int length;
}SqList;
bool ListDelete(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;
}
1.5 删除指定的所有元素
void ListDeleteAll(SqList& L,int value) {
int k = 0;
for (int i = 0; i < L.length; i++) {
if (L.data[i] != value) {
L.data[k] = L.data[i];
k++;
}
}
L.length = k;
}
1.6 按位查找元素操作
#include<stdio.h>
# define MaxSize 50
typedef struct{
int data[MaxSize];
int length;
}SqList;
int GetElem(SqList L,int index){
if(index<1 || index>L.length){
printf("位置不合法!\n");
return -1;
}
return L.data[index-1];
}
1.7 按值查找元素位置
#include<stdio.h>
# define MaxSize 50
typedef struct{
int data[MaxSize];
int length;
}SqList;
int LocateElem(SqList L,int e){
for(int i=0;i<L.length;i++){
if(L.data[i]==e){
return i+1;
}
}
return 0;
}
二、动态分配的顺序表
2.1 数据元素的定义
# define InitSize 100
typedef struct{
ElemType *data;
int MaxSize;
int length;
}SqList;
2.2 初始化操作
#include<stdio.h>
#include<stdlib.h>
# define InitSize 100
typedef struct{
int *data;
int MaxSize;
int length;
}SqList;
void InitList(SqList &L){
L.data=(int *)malloc(InitSize*sizeof(int));
L.length=0;
L.MaxSize=InitSize;
}
int main()
{
SqList L;
InitList(L);
return 0;
}
2.3 扩展顺序表空间大小
#include<stdio.h>
#include<stdlib.h>
# define InitSize 100
typedef struct{
int *data;
int MaxSize;
int length;
}SqList;
void IncreaseSize(SqList &L,int len){
int *p=L.data;
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
for(int i=0;i<L.MaxSize;i++){
L.data[i]=p[i];
}
L.MaxSize=L.MaxSize+len;
free(p);
}