這是c#數據結構一書中的一個例子,線性表。實現了一個接口IList,再基於這個接口建立一個SeqList的類,能實現c#中的List類的通常功能,增刪,判空,判滿,追加,獲得某一項的索引,數組的長度,清空等。日常也常用List,但並不知道它內部實現的細節。經過這個小例子,想也更清晰了些。就是對在內存中有一塊連續存儲空間的數組進行操做的一個類。c#
- public interface IListDS<T>{
- int GetLength();
- void Clear();
- bool IsEmpty();
- void Append(T item);
- void Insert(T item,int i);
- T Delete(int i);
- T GetElem(int i);
- int Locate(T value);
- }
- public class SeqList<T>:IListDS<T>{
- private int maxsize;
- private T[] data;
- private int last;
- public T this[int index]{
- get{
- return data[index];
- }
- set{
- data[index]=value;
- }
- }
- public int Last{
- get{
- return last;
- }
- }
- public int Maxsize{
- get{return maxsize;}
- set{maxsize=value;}
- }
- public SeqList(int size){
- data=new T[size];
- maxsize=size;
- last=-1;
- }
- public int GetLength(){
- return last+1;
- }
- public void Clear(){
- last=-1;
- }
- public bool IsEmpty(){
- if(last==-1){
- return true;
- }else{
- return false;
- }
- }
- public bool IsFull(){
- if(last==maxsize-1){
- return true;
- }else{
- return false;
- }
- }
- public void Append(T item){
- if(IsFull){
- Console.WriteLine("List is full");
- return;
- }
- data[++last]=item;
- }
- public void Insert(T item,int i){
- if(IsFull){
- Console.WriteLine("List is full");
- return;
- }
- if(i<1 || i>last+2){
- Console.WriteLine("Position is error");
- return;
- }
- if(i==last+2){
- data[last+1]=item;
- }
- else{
- for(int j=last;j>i-1;--j){
- data[j+1]=data[j];
- }
- data[j-1]=item;
- }
- ++last;
- }
- public T Delete(int i){
- T tmp=default(T);
- if(IsEmpty()){
- Console.WriteLine("List is empty");
- return tmp;
- }
- if(i<1 || i>last+1){
- Console.WriteLine("Position is error");
- return tmp;
- }
- if(i==last+1){
- tmp=data[last--];
- }else{
- tmp=data[i-1];
- for(int j=i;j<=last;++j){
- data[j]=data[j+1];
- }
- }
- --last;
- return tmp;
- }
- public T GetElem(int i){
- if(IsEmpty() || (i<1) || (i>last+1)){
- Console.WriteLine("List is empty or Position is error");
- return default(T);
- }
- return data[i-1];
- }
- public int Locate(T value){
- if(IsEmpty()){
- Console.WriteLine("List is empty");
- return -1;
- }
- int i=0;
- for(i;i<=last;++i){
- if(value.Equals(data[i])){
- break;
- }
- }
- if(i>last){
- return -1;
- }
- return i;
- }
- }
若是說裏面還有些不清晰的知識點那就是索引器,和泛型中使用的default關鍵字了。對於索引器,使用的還不夠熟悉。default查了一下,若是T是引用類型,則返回null,若是T是數值類型,則返回零。數組