数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈) 什么是线性表 顺序表(数组,向量) 顺序队列 顺序栈
还记得数据结构这个经典的分类图吧:
今天主要关注一下线性表。
线性表的划分是从数据的逻辑结构上进行的。线性指的是在数据的逻辑结构上是线性的。即在数据元素的非空有限集中
顺序表(数组,向量)
顺序表的结构:
typedef struct
{
DataType *m_pData;
int m_nMax,m_nSize;
}SeqList;
typedef int DataType;
顺序表的基本操作及其实现
有了数据的结构定义,就必须有对应的方法实现从来进行相关的操作,基本的运算函数如下:Void FreeList(SeqList *L); // 析构函数,释放数组空间
int ListSize(SeqList *L) // 求表的长度
int IsEmpty(SeqList *L); // 判断数组是否空,1:空,0满
int IfFull(SeqList *L); // 判断数组是否满
DataType GetData(int pos); // 获取数组某元素
int Locate(SeqList *L,DataTypeitem); // 判断元素位置
Void SetData(SeqList *L,DataTypeitem,int pos); //元素位置赋值
Void Insert(SeqList *L,int pos,DataType item); //在某位置插入元素
void InsertRear(SeqList *L,DataType&item); // 在末尾插入元素
void Delete(SeqList *L,int pos);//删除某位置元素
void ClearList(SeqList *L); // 清表,表中的元素个数是0;
Void DeleteBetween(SeqList *L,intstart, int end)
voidSetList(SeqList *L,int n)
{
L->m_pData=newDataType[n];
if(L->m_pData==NULL)
{
cout<<”overflow”<<endl;exit(1);
}
L->m_nMax=n;
L->m_nSize=0;
}
Void FreeList(SeqList *L)
{
delete [ ]L->m_pData;
L->m_nSize=0;
L->m_nMax=0;
}
void Insert(SeqList *L,DataType item,int pos)
{
//在顺序表中在pos处插入item
i=1;
if(L->m_nSize==L->m_nMax){printf(“SeqListis FULL ”);exit(1)}
if(pos<=0||pos>L->m_nSize)
{
printf(“Pos is out of range”);exit(1);
}
for(i=L->m_nSize-1;i>=pos;i--)
L->m_nData[i+1]=L->m_nData[i];
L->m_nData[pos]=item;
L->m_nSize++;
}
顺序表的应用:动态字符串
char str[13]=“Hello, world!”;
char *pStr = str;
gets(char *str);
puts(char *str);
strcpy(char *str1, char *str2); //字符串拷贝
strcat(char *str1, char *str2); //字符串连接,str1必须足够大
strcmp(char *str1, char *str2); //字符串比较
strlen(char *str); //字符串求长,不包含’ ’的长度
动态字符串:
{
int m_nSize;//不含结束符的长度
char*m_pStr;
}String;
顺序队列
顺序队列的结构:
顺序队列的结构如下图所示:{
DataType *m_pData;
int m_nMax;
int m_nFront,m_nRear, m_nSize;
}Queue;
顺序队列的基本操作及其实现
DataTypeQDelete(Queue *Q)
{
DataType item;
if(Q->m_nSize==0)
{
printf(“队列空 ”);
Exit(1);
}
item=Q->m_pData[Q->m_nFront];
Q->m_nFront=(Q->m_nFront+1)%Q->m_nMax;
Q->m_nSize--;
顺序栈
顺序栈的结构:
{
DataType *m_pData;
int m_nMax;
int m_nTop;//插入数据的位置,空为-1,入栈+1,出栈-1
}Stack;