📄 sqlist.h
字号:
#include <process.h>
#include <iostream.h>
//预定义常量和类型
const True=1;
const False=0;
const oK=1;
const error=0;
const infeasible=-1;
const overflow =2;
const maxsize=100;
const list_int_size=100;
const listincrement=10;
const underflow=0;
//预定义类型
typedef struct{
int *elem;
int length;
int listsize;
int incrementsize;
}sqlist;
//初始化
void creatlist_sq(sqlist &l)
{
int x,i;
//构造一个最大容量为maxsize的顺序表l
l.elem=new int[maxsize]; //为顺序表分配一个最大容量为maxsize的数组空间
l.length=0;
for(i=0;i<maxsize;i++)
{
cin>>x;
l.elem[i]=x;
l.length++;
if(l.elem[i]==0)
break;
}
}
//输出线性表的所有元素
void outputlist_sq(sqlist &l)
{
int i;
for(i=0;i<maxsize,l.elem[i]!=0;i++)
{
cout<<l.elem[i]<<'\t';
}
}
//求长度
int len_sq(sqlist l)
{
int i,k=0;
for(i=0;i<maxsize;i++)
{
if(l.elem[i]==0) break;
if(l.elem[i]!=0) k++;
}
return k;
}
//取元素
void getelem(sqlist l,int i)
{
//在顺序表l中找到第i个位置的元素
if(i<1||i>len_sq(l)) cout<<"您输入的位序不在线性内,请重新输入......";
else cout<<l.elem[i-1];
}
//求前导元素
int priorelem_sq(sqlist l,int e)
{
//在顺序表中查找元素e,若顺序表中包含元素
//若元素e不是第一个元素,则返回它的前导元素,否则无意义
int i=1;
int *p=l.elem;
while(i<=l.length && *p++!=e) ++i;
if(i>1&&i<=l.length) return l.elem[i-2];
else return 0;
}
//求后继元素
int nextelem_sq(sqlist l,int e)
{
//在顺序表中查找元素e,若顺序表中包含元素
//若元素e不是最后元素,则返回它的后继元素,否则无意义
int i=1;
int *p=l.elem;
while(i<=l.length && *p++!=e) ++i;
if(i<=l.length-1) return l.elem[i];
else return 0;
}
//查找元素
int locateelem_sq(sqlist l,int e)
{
//在顺序表中l中查找第一个与e相等的数据元素
//若找到,则返回其在l中的位序,否则返回0
int i=1;
while(i<=l.length && l.elem[i]!=e) ++i;
if(i<=l.length) return i+1;
else return 0;
}
//出错信息处理函数
void errorMessage(char *s)
{
cout<<s<<endl;
exit(1);
}
//插入元素
void listInsert_sq(sqlist &l,int i,int e)
{
//在顺序表l的第i个元素之前插入新的元素e
//i的合法值为1<=i<=l.length+1,若表中容量不足,则按该顺序表的预定义增量扩充
if(i<1||i>l.length+1) errorMessage("i值不合法!");
if(i>=1&&i<=len_sq(l))
{
for(int j=l.length-1;j>=i-1;j--)
l.elem[j+1]=l.elem[j];
l.elem[j+1]=e;
}
for(int k=0;k<l.length;k++)
{
cout<<l.elem[k]<<'\t';
}
}
//删除元素
int listdelete_sq(sqlist &l,int i) //删除
{
if(i<1||i>l.length) return error;
if (l.length==0) return underflow; // 表空
for (int j=i;j<l.length; ++j)
//被删除元素之后的元素前移
l.elem[j-1]=l.elem[j];
--l.length; //表长减1
return oK;
}
//判定一个线形表是否为空表
void chargeempty_sq(sqlist l)
{
if(l.length==0)
cout<<"此表为空";
else
cout<<"此表非空";}
//置空一个线形表
void destroylist_sq(sqlist &l)
{
delete[]l.elem;
l.listsize=0;
l.length=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -