線性表之順序表 原始碼
阿新 • • 發佈:2019-01-01
#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; }