1. 程式人生 > >線性表之順序表 原始碼

線性表之順序表 原始碼

#include<algorithm>
#include<iostream>
using namespace std;
struct List
{
	int *elem;
	int length;
	int maxsize;
};
void Init_list(List &L) //初始化線性表 
{
	L.maxsize=100;
	L.elem=new int[L.maxsize];
	if(L.elem==NULL)
	 {
	 	cout<<"動態非配失敗"<<endl;
		exit(1); 
	 }
	 L.length=0;
	 
}
void Clear_list(List &L)//清空原始表 
{
	if(L.elem!=NULL)
	{
		delete []L.elem;
		L.elem=NULL;
	} 
	L.length=0;
	L.maxsize=0;
}
void Locate_list(List &L,int e)//查詢元素的位置 
{
	for(int i=0;i<L.length;i++)
	{
		if(L.elem[i]==e)
		   cout<<"您所查詢元素的位置序號為"<<i+1<<endl;
    }
}
void Traverse_list(List &L)//遍歷線性表中的元素,若遍歷記錄型別,則需要插入操作符 
{
	for(int i=0;i<L.length;i++)
	{
		if(i!=(L.length-1))
		    cout<<L.elem[i]<<" ";
		else
		    cout<<L.elem[i]<<endl;
	}
}
void buffersort_list(List &L)
{
	for(int i=0;i<L.length-1;i++)
	{
		for(int j=i+1;j<L.length-1;j++)
		{
			if(L.elem[j]>L.elem[j+1])
		     {
		     	int temp=L.elem[j];
		     	L.elem[j]=L.elem[j+1];
		     	L.elem[j+1]=temp;
		     }
		}
	}
}

int Length_list(List &L)//計算線性表長度 
{
	return L.length;
}

bool Insert_list(List &L,int i,int e)//插入元素 
{
	if(i<1||i>L.length+1)
	     cout<<"i值無效"<<endl;
	if(L.length==L.maxsize)
	{
	     cout<<"當前儲存空間已滿"<<endl; 
	     int k=sizeof(int);
		 L.elem=(int *)realloc(L.elem,2*L.maxsize*k);
		 if(L.elem==NULL)
		 {
		 	cout<<"動態分配失敗"<<endl;
			 exit(1); 
		 }
		 L.maxsize=2*L.maxsize; 
    } 
	for(int j=L.length-1;j>=i-1;j--)
	{
		L.elem[j+1]=L.elem[j];
	} 
	L.elem[i-1]=e;
	L.length++;
	return true;
}
bool Delete_list(List &L,int i) //刪除指定元素 
{
	if(L.length==0)
	{ 
	   cout<<"線性表為空"<<endl;
	   return false;
	} 
	if(i<1 ||i>L.length)
	   cout<<"輸入i值無效"<<endl;
	   
	int e=L.elem[i-1];
	for(int j=i;j<L.length;j++)
	{
		L.elem[j-1]=L.elem[j];
	} 
	L.length--;
	return true; 
}
int main()
{
	int a[10]={0};
	int i;
	cout<<"請輸入線性表的10個正整數元素:";
	for(int i=0;i<10;i++)
    {
    	cin>>a[i];
    }
    cout<<endl;
    List list;
    Init_list(list);   //初始化線性表 
    for(i=0;i<10;i++)
    	Insert_list(list,i+1,a[i]);
    cout<<"遍歷新插入的線性表的元素:";
	Traverse_list(list); 
    Locate_list(list,10);
    cout<<"該線性表的長度為"<<Length_list(list)<<endl;
    //sort(L.list,L.list+L.length); 
	buffersort_list(list);
    cout<<"對該線性表進行升序排列為:";
    Traverse_list(list);
	cout<<"刪除指定位置的元素為"<<Delete_list(list,5)<<endl;
	Traverse_list(list);
return 0;	
}