/*
============================================================================
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;
}
}
简单数据结构之顺序表(C++ 引用传递实现)
最新推荐文章于 2023-07-27 22:41:55 发布