零、顺序结构线性表考点知识回顾
1. 存在唯一“第一个”数据元素;存在唯一“最后一个”数据元素。
2. 除第一个之外,每个数据元素均只有一个前驱;除最后一个外,每个元素均只有一个后继。
3. 逻辑上相邻,物理上也一定相邻。
4. 可随机存取。
5. 更多的用于查找和修改。
代码预处理
#include<iostream>
#include<cstdlib>
#define LEN 10
#define ERROR 0
#define OK 1
using namespace std;
其中using namespace std是c++代码使用iostream头文件时需要写上的 如果使用纯C语言stdio头文件,则不需要这一行
一、加工性操作
0.顺序表结构体定义
typedef struct{
int *elem;
int length;
int listsize;
}SqList;
1.构造空表
int InitList_Sq(SqList &L)
{
L.elem=(int *)malloc(LEN*sizeof(int));
if(!L.elem)
{
cout<<"初始化失败";
return ERROR;//判断是否为空表
}
L.length=0;
L.listsize=LEN;
return OK;
}
2.置空和销毁
int ClearList(SqList &L)//置空
{
L.length=0;
return OK;
}
int DestroyList(SqList &L)//销毁
{
free(L.elem);
return OK;
}
3.插入元素
注意:插入完毕后表长要++
void ListInsert_Sq(SqList &L,int i,int e)
{
int *p;
int *q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;p--)*(p+1)=*p;
*q=e;
++L.length;
}
4.删除元素
注意:插入完毕后表长要- -
int ListDelete_sq(SqList &L,int d)
{
if(d>=1&&d<=L.length)
{
int *p=&(L.elem[d-1]); //p为被删除元素的位置
int *q=L.elem+L.length-1;
for(++p;p<=q;p++)*(p-1)=*p;
--L.length;
cout<<"删除该元素后的表:";
for(int j=0;j<L.length;j++)cout<<L.elem[j]<<" ";
return OK;
}
else return -1;
}
二、引用型操作
1.判空
int ListEmpty(SqList L)
{
if(L.length==0)return ERROR;//是空表
else return OK;//不是空表
}
2.求表长
int ListLength(SqList L)
{
return L.length;
}
不要怀疑,这个操作就是这么简单。
3.获取元素
int GetElem(SqList L,int j)
{
if(j>=1&&j<=L.length)
{
int e=L.elem[j-1];
return e;
}
else return -1;
}
4.获取前驱/后继元素
int PriorElem(SqList L,int b)
{
if(b>1&&b<=L.length)//不是第一个元素
{
int f=L.elem[b-2];
return f;
}
else return ERROR;
}
int NextElem(SqList L,int c)
{
if(c<=L.length&&c>=1)
{
int f=L.elem[c];
return f;
}
else return ERROR;
}