这里是C++实现的有关顺序表的一些基本操作,包括向量、栈和队列的增删改查,以及一些实际问题的应用。
一、向量。
#include<iostream>
using namespace std;
//抽象数据类型
#define MaxSize 100
typedef int datatype;
typedef struct
{
datatype V[MaxSize];
int n;
}SeqList;
//向量插入
void Insert(SeqList &L,int i,datatype x)
{
//参数检查
if(i<0||i>L.n)
{
cout<<"position error!"<<endl;
return;
}
if(L.n>=MaxSize)
{
cout<<"overflow!"<<endl;
return;
}
for(int j=L.n-1;j>=i;j--)
L.V[j+1]=L.V[j];
L.V[i]=x;
L.n++;
}
//向量删除
void Delete(SeqList &L,int i)
{
if(i<0||i>L.n-1)
{
cout<<"position error!"<<endl;
return;
}
if(L.n==0)
{
cout<<"underflow!"<<endl;
return;
}
for(int j=i;j<L.n;j++)
L.V[j]=L.V[j+1];
L.n--;
}
int main()
{
int x,y;
SeqList L;
L.n=5;
cout<<"请输入五个元素:"<<endl;
for(int i=0;i<L.n;i++)
cin>>L.V[i];
cout<<"插入位置、元素:"<<endl;
cin>>y>>x;
Insert(L,y-1,x);
for(int i=0;i<L.n;i++)
cout<<L.V[i]<<endl;
cout<<"删除位置:"<<endl;
cin>>y;
Delete(L,y-1);
for(int i=0;i<L.n;i++)
cout<<L.V[i]<<endl;
return 0;
}
二、栈。
#include<iostream>
using namespace std;
//抽象数据类型
#define MaxSize 100
typedef int datatype;
typedef struct
{
datatype S[MaxSize];
int top;
}SeqStack;
//栈的推入
void Push(SeqStack &ST,datatype x)
{
//参数检查
if(ST.top>=MaxSize-1)
{
cout<<"overflow!"<<endl;
return;
}
ST.top++;//注意是top先++!
ST.S[ST.top]=x;
}
//栈的弹出
void Pop(SeqStack &ST)
{
//参数检查
if(ST.top==-1)
{
cout<<"underflow!"<<endl;
return;
}
ST.top--;
}
//读栈顶元素
datatype GetTop(SeqStack &ST)
{
//参数检查
if(ST.top==-1)
{
cout<<"error!"<<endl;
return 0;
}
return ST.S[ST.top];
}
int main()
{
SeqStack ST;
datatype x;
ST.top=4;
cout<<"请输入5个元素:"<<endl;
for(int i=0;i<5;i++)
cin>>ST.S[i];
cout<<"栈顶元素为:"<<endl<<GetTop(ST)<<endl;
cout<<"推入元素:"<<endl;
cin>>x;
Push(ST,x);
for(int i=0;i<=ST.top;i++)//top就是下标!
cout<<ST.S[i]<<endl;
cout<<"弹出元素:"<<endl;
Pop(ST);
for(int i=0;i<=ST.top;i++)
cout<<ST.S[i]<<endl;
return 0;
}
三、队列。
#include<iostream>
using namespace std;
//抽象数据类型
#define MaxSize 7
typedef int datatype;
typedef struct
{
datatype Q[MaxSize];
int front;
int rear;
}SeqQueue;
//入队
void EnQueue(SeqQueue &QU,datatype x)
{
//参数检查
if(QU.front==(QU.rear+1)%MaxSize)//注意此时溢出的判断方法,真溢出!
{
cout<<"overflow!"<<endl;
return;
}
QU.Q[QU.rear]=x;
QU.rear=(QU.rear+1)%MaxSize;//注意此时rear的移动方式!
}
//出队
void DeQueue(SeqQueue &QU)
{
//参数检查
if(QU.front==QU.rear)//注意此时下溢的判断方法!
{
cout<<"underflow!"<<endl;
return;
}
QU.front=(QU.front+1)%MaxSize;
}
//读取队头元素
datatype GetFront(SeqQueue &QU)
{
//参数检查
if(QU.front==QU.rear)
{
cout<<"error!"<<endl;
return 0;
}
return QU.Q[QU.front];
}
int main()
{
SeqQueue QU;
datatype x;
QU.front=0;
QU.rear=5;//rear的值为元素个数值!不是下标!
cout<<"请输入5个元素:"<<endl;
for(int i=0;i<5;i++)
cin>>QU.Q[i];
cout<<"插入元素:"<<endl;
cin>>x;
EnQueue(QU,x);
cout<<"front= "<<QU.front<<" "<<"rear= "<<QU.rear<<endl;
while(QU.front!=QU.rear)//注意这里的遍历方式!
{
cout<<QU.Q[QU.front]<<endl;
QU.front=(QU.front+1)%MaxSize;
}
QU.front=(QU.front+1)%MaxSize;
cout<<"删除元素"<<endl;
DeQueue(QU);
cout<<"front= "<<QU.front<<" "<<"rear= "<<QU.rear<<endl;
while(QU.front!=QU.rear)//注意这里的遍历方式!
{
cout<<QU.Q[QU.front]<<endl;
QU.front=(QU.front+1)%MaxSize;
}
return 0;
}
四、队列应用_输出杨辉三角形。
#include<iostream>
#define MaxSize 100
using namespace std;
//变量类型与声明
typedef int datatype;
typedef struct
{
datatype Q[MaxSize];
int front,rear;
}SeqQueue;
SeqQueue QU;
//置空队
void ClearQueue(SeqQueue &QU)
{
QU.front=0;
QU.rear=0;
}
//入队,使用循环队列
void EnQueue(SeqQueue &QU,datatype x)
{
//参数检查
if(QU.front==(QU.rear+1)%MaxSize)
{
cout<<"overflow!"<<endl;
return;
}
QU.Q[QU.rear]=x;
QU.rear=(QU.rear+1)%MaxSize;
}
//出队
void DeQueue(SeqQueue &QU,datatype &x)
{
//参数检查
if(QU.rear==QU.front)
{
cout<<"underflow!"<<endl;
return;
}
x=QU.Q[QU.front];
QU.front=(QU.front+1)%MaxSize;
}
//判断队是否为空,为空则返回1,不为空则返回0
int QueueEmpty(SeqQueue &QU)
{
if(QU.rear==QU.front)
return 1;
return 0;
}
//输出n级杨辉三角
void YangHuiTriangle(SeqQueue &QU,int n)
{
int i,j;
datatype s,t;
ClearQueue(QU);
EnQueue(QU,1);
EnQueue(QU,1);
cout<<1<<" "<<1<<endl;
for(i=2;i<=n;i++)
{
EnQueue(QU,1);
cout<<1<<" ";
DeQueue(QU,s);//获取第i行的第一个元素s
for(j=2;j<=i;j++)
{
DeQueue(QU,t);//获取前一行第j个数据t
EnQueue(QU,s+t);
cout<<s+t<<" ";
s=t;
}
EnQueue(QU,1);
cout<<1<<endl;
}
cout<<endl;
}
//测试函数
int main()
{
int n;
ClearQueue(QU);
cout<<"请输入杨辉三角的级数:"<<endl;
cin>>n;
cout<<endl;
YangHuiTriangle(QU,n);
return 0;
}
五、栈的应用_数制转换。
#include<iostream>
#define MaxSize 100
using namespace std;
//变量类型与声明
typedef int datatype;
typedef struct
{
datatype S[MaxSize];
int top;
}SeqStack;
SeqStack ST;
//初始化栈
void InitStack(SeqStack &ST)
{
ST.top=-1;
}
//入栈
void Push(SeqStack &ST,datatype x)
{
//参数检查
if(ST.top>=MaxSize-1)
{
cout<<"overflow!"<<endl;
return;
}
ST.S[++ST.top]=x;
}
//弹栈
datatype Pop(SeqStack &ST)
{
//参数检查
if(ST.top==-1)
{
cout<<"underflow!"<<endl;
return 0;
}
return ST.S[ST.top--];
}
//判断是否为空栈,是则返回1,不是则返回0
int StackEmpty(SeqStack &ST)
{
if(ST.top==-1)
return 1;
return 0;
}
//按d进制转换为N进制整数并输出
void conversion(int d,int N)
{
cout<<"用"<<N<<"进制表示的"<<d<<"为:"<<endl;
while(d)
{
Push(ST,d%N);
d/=N;
}
while(!StackEmpty(ST))
cout<<Pop(ST);
cout<<endl;
}
//测试函数
int main()
{
int d,N;
InitStack(ST);
cout<<"请输入一个十进制数,并输入需要转化的进制:"<<endl;
cin>>d>>N;
conversion(d,N);
return 0;
}