#include <iostream>
using namespace std;
#define startsize 100//初始容量
#define sizestep 10//当容量不足时扩大容量
struct list{
int * data;
int length;
int size;
};//结构体存储线性表的各数据
void init(list & nlist)//建立线性表
{
nlist.size=startsize;
nlist.data=new int[nlist.size];
nlist.length=0;
}
void destory(list & nlist)//销毁线性表
{
nlist.length=0;
delete[] nlist.data;
newlist.data=NULL;
}
void clear(list & nlist)//清空线性表
{
delete[] nlist.data;
nlist.data=NULL;
nlist.data=new int[nlist.size];//重新申请空间
nlist.length=0;
}
bool empty(int & nlist)//判断线性表是否为空,空返回true;
{
return nlist.length==0;
}
int len(int & nlist)//返回线性表的长度
{
return nlist.length;
}
//按位置查找线性表中的一个数,位置从一开始
void weifound(list nlist,int i,int &e)
{
if(nlist.length==0)
return ;
if(i<1||i>nlist.length)
return ;
e=nlist[i-1];
}
//按值查找
void zhifound(list nlist ,int & i,int e)
{
int j=0;
for(j=0;j<nlist.length;j++)
{
if(nlist[[j]==e)
{
i=j;
return;
}
}
e=-1;
return ;
}
void qianqu(list nlist,int x,int &q)//求前驱的元素
{
int loca=0;
zhifound(nlist,loca,x);
if(loca==-1) return ;
if(loca==1) return ;
q=nlist.data[loca-1];
}
void houji(list nlist ,int x,int &j)//求后继
{
int loca=0;
zhifound(nlist,loca,x);
if(loca==-1||loca=1) return ;
j=nlist.data[loca+1];
}
//插入特定位置元素
void insert(list & nlist ,int i,int e)
{
if(i<1||i>nlist.length)
return ;
int j=0;
if(nlist.length==nlist.size)
{
int * p=new int[nlist.size];
for(j=0;j<nlist.length;j++)
{
p[j]=nlist.data[j];
}
nlist.size+=sizestep;
delete[] nlist.data;
nlist.data=new int[nlist.size];
for(j=0;j<nlist.length;j++)
nlist.data[j]=p[j];
}
for(j=nlist.length;j>i-1;j--)
nlist.data[j]=nlist.data[j-1];
nlist.data[i-1]=e;
nlist.length++;
}
//删除指定位置元素
void delete(list & nlist,int i)
{
if(i<1||i>nlist.length)
{
return;
}
for(int j=i-1;j<nlist.length-1;j++)
{
nlist.data[j]=nlist[j+1];
}
nlist.length--;
}
//链式存储
struct node
{
int value;
node * next;
};
void init(node * & node)//建立链表
{
head=new node;
head.value=0;
head.next=NULL;
}
void destory(node * & head)//销毁链表
{
delete head;
head=NULL;
}
void clear(node * & head)//清空链表
{
head.value=0;
head.next=NULL;
}
bool empty(node * head)//判断链表是否为空
{
return head.value==0;
}
bool length(node * head)//返回链表长度
{
return head.value;
}
//按位求值
bool weifound(node * head,int i,int &e)
{
int j=0;
node * l=head;
if(i<1||i>head.value) return false;
for(j=0;j<=i-1;j++)
{
l=l.next;
}
e=l.value;
return true;
}
//插入元素
bool insert(node * & head ,int i,int value)
{
int j=0;
node * l=head;
if(i<1||i>head.value+1) return false;
while(j<i-1)
{
l=l.next;
j++;
}
node * s=new node;
s.value=value;
s.next=l.next;
l.next=s;
head.value++;
return true;
}
//删除元素
bool delete(node * & head;int i)
{
int j=0;
node * L=head;
if(i<1|i>head.value) return false;
while(j<i-1)
{
l=l.next;
j++;
}
l.next=l.next.next;
return true;
}
线性表
最新推荐文章于 2019-08-15 09:22:34 发布