简单数据结构之顺序表(C++ 引用传递实现)

/*
 ============================================================================
 Name        : seq_list.cpp
 Author      : ntsk13 beijiwei@qq.com
 Version     :
 Copyright   : GPL
 Description : sequence list study, complement by C++ reference
 Date		 : 2015.06.08
 ============================================================================
 */

#include <iostream>

using namespace std;

#define SEQ_LIST_CAPACITY 100
typedef struct sl_element{
	int elem;
	int locate;// 元素位置
}Sl_element,*Psl_element;

typedef struct seq_list{
	Sl_element array[SEQ_LIST_CAPACITY];
	int cur_len;//当前长度
	int capacity;//容量
}Slist;

void Slist_init(Slist & L);
int Slist_is_empty(Slist & L);
int Slist_length(Slist & L);
void Slist_clear(Slist &L);
void Slist_get_element(Slist &L, int th,Psl_element pe);
void Slist_get_element_locate(Slist &L,Sl_element e,int *locate);

void Slist_get_last_element(Slist &L,Sl_element e,Psl_element pe);
void Slist_get_next_element(Slist &L,Sl_element e,Psl_element pe);

void Slist_insert_element(Slist &L,Sl_element e,int i);
void Slist_delete_element(Slist &L,int i);
void Slist_traverse(Slist &L);


int main(void) {
	int i=0;
	int data[10]={0,1,2,3,4,5,6,7,8,9};
	Slist one;
	Sl_element tmp,two,three,four;
	Slist_init(one);

	for(i=0;i<10;i++)
	{
		tmp.elem=data[i];
		tmp.locate=i;
		Slist_insert_element(one,tmp,i);
	}
	cout<<"The two element is "<<two.elem<<" , locate is "<<two.locate<<endl;

	Slist_get_last_element(one,tmp,&two);
	Slist_get_last_element(one,two,&three);
	Slist_get_next_element(one,three,&four);
	cout<<"The two element is "<<two.elem<<",locate is "<<two.locate<<endl;
	cout<<"The three element is "<<three.elem<<",locate is "<<three.locate<<endl;
	cout<<"The four element is"<<four.elem<<",locate is "<<four.locate<<endl;

	cout<<"Before delete 5 ,length="<<one.cur_len<<endl;
	Slist_traverse(one);
	Slist_delete_element(one,5);
	cout<<"After delete 5 length="<<one.cur_len<<endl;
	Slist_traverse(one);

	//printf("Before insert 5 ,20 \n");

	Slist_insert_element(one,two,5);
	cout<<"After insert 5 length="<<one.cur_len<<endl;
	Slist_traverse(one);
	Slist_delete_element(one,0);
	Slist_delete_element(one,1);
	Slist_delete_element(one,2);
	Slist_delete_element(one,3);
	Slist_delete_element(one,9);
	cout<<"After delete 0,1,2,3,9 length="<<one.cur_len<<endl;
	Slist_traverse(one);

	return 0;
}

void Slist_init(Slist & L)
{
	L.capacity=SEQ_LIST_CAPACITY;
	L.cur_len=0;
}

int Slist_is_empty(Slist & L)
{
	if( L.cur_len==0 )
		return 1;
	else
		return 0;
}
int Slist_length(Slist & L)
{
	return L.cur_len;
}
void Slist_clear(Slist & L)
{
	L.cur_len=0;
}
void Slist_get_element(Slist & L, int th,Psl_element pe)
{
	*pe=L.array[th];
}

void Slist_get_element_locate(Slist &L,Sl_element e,int *locate)
{
	*locate=e.locate;
}

void Slist_get_last_element(Slist & L,Sl_element e,Psl_element pe)
{
	*pe=L.array[e.locate-1] ;
}
void Slist_get_next_element(Slist & L,Sl_element e,Psl_element pe)
{
	*pe=L.array[e.locate+1] ;
}

void Slist_insert_element(Slist & L,Sl_element e,int i)
{
	int length=L.cur_len;
	int j=0;
	if(i==length)
	{
		L.array[i]=e;
		L.cur_len+=1;
		L.array[i].locate=i;
		return;
	}
	if(i>length)
	{
		cout<<"insert error,i > length!!!"<<endl;
		return;
	}
	if( length== L.capacity)
	{
		cout<<"sequence list full cannot insert!!!"<<endl;;
				return;
	}
	for(j=length-1; j>=i;j--)
	{
		L.array[j+1]=L.array[j];
		L.array[j+1].locate+=1;
	}
	L.array[i]=e;
	L.cur_len+=1;
	L.array[i].locate=i;
}
void Slist_delete_element(Slist & L,int i)
{
	int length=L.cur_len;
	int j=0;
	if(i==length)
	{
		L.cur_len-=1;
		return;
	}
	if(i>length || i < 0 )
	{
		cout<<"delete site error !!!"<<endl;
		return;
	}

	for(j=i; j<length;j++)
	{
		L.array[j]=L.array[j+1];
		L.array[j].locate-=1;
	}

	L.cur_len-=1;
}

void Slist_traverse(Slist & L)
{
	int i=0;
	for(i=0;i<L.cur_len;i++)
	{
		cout<<"The "<<i<<"th element is "<<L.array[i].elem<<endl;
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值