📄 seqlist.cpp
字号:
#include "iostream.h"
#include "stdlib.h"
#include "process.h"
const LIST_INT_SIZE=100;
const LISTINCREMENT=10;
template <class T>//利用模板来定义顺序存储的线性表的抽象数据类型
class seqlist
{
public:
T *elem;
int length ;
int listsize;
int incrementsize;
seqlist() //构造函数
{listsize=LIST_INT_SIZE; elem=new T[listsize];length=0;
incrementsize=LISTINCREMENT;}
~seqlist(){delete []elem;listsize=0;length=0;}//析构函数,释放开辟的空间
void insert1(int i, T x) //插入元素e于线性表中的第i个位置上
{if(i<0||i>length) ErrorMessage("i值不合法!");//调用错误处理函数
for(int j=length;j>=i;j--)
elem[j+1]=elem[j];
elem[i]=x;
length++;
}
void printout()//输出线性表当中的所有元素
{int j;
for(j=0;j<length;j++)
cout<<elem[j]<<" ";
}
int locateElem_sq(seqlist &l, T e) //在顺序表L中查找第一个值于e相等的数据元素,
//找到则返回其在L中的位序,否则返回0
{int i=1;
T *p;
p=l.elem;
while (i<=l.length && *p++!=e )
++i;
if(i<=l.length) return i; else return 0;
}
void ListDelete_sq(seqlist &l,int i,T &e) ;//删除
void invert(seqlist &l,int s,int t);//逆置
};
void ErrorMessage(char *s)
{cout<<s<<endl;
// exit(1);
}
template <class T>
void seqlist<T>::ListDelete_sq( seqlist &l,int i,T &e)//此函数删除地i个元素,并将其值用e返回
{T *p,*q;
if((i<1)||(i>l.length)) ErrorMessage("i值不合法!");
p=&(l.elem[i-1]);
e=*p;q=l.elem+l.length-1;
for(++p;p<=q;++p) *(p-1)=*p;
l.length--;
}
template <class T>
void seqlist<T>::invert( seqlist &l,int s,int t)
{int k; T w;
for(k=s;k<=(s+t)/2;k++)
{w=l.elem[k];l.elem[k]=l.elem[s+t-k];l.elem[s+t-k]=w;
}
}
void main()
{
seqlist <char> llist;
char x;
llist.insert1(0,'a');
llist.insert1(1,'m');
for(int j=1;j<=4;j++)
{cin>> x;llist.insert1(1,x); }
llist.insert1 (0,'n');
llist.insert1(2,'8');
cout<<"原表为: ";llist.printout();
llist.invert(llist,0,llist.length-1 );cout<<"逆置后表为: ";
llist.printout ();
cout<<llist.locateElem_sq(llist,'m')<<endl;
llist.ListDelete_sq(llist,2,x);
llist.printout();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -