线性表

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值