//==================================================================== // 查找行、列值为nRow, nCol的结点 //==================================================================== public ChainItem <T> GetElement(int nRow, int nCol) { ChainItem <T> pCur = pHead; while (pCur != null && !(pCur.col == nCol && pCur.row == nRow)) { pCur = pCur.next; } return(pCur); }
//==================================================================== // 从 startFrom 处向后查找列为 nCol 的第一个结点 //==================================================================== public ChainItem <T> GetFirstElementOfCol(int nCol, ChainItem <T> startFrom) { ChainItem <T> pCur = startFrom; while (pCur != null && pCur.col != nCol) { pCur = pCur.next; } return(pCur); }
//==================================================================== // 从 startFrom 处向后查找行为 nRow 的第一个结点 //==================================================================== public ChainItem <T> GetFirstElementOfRow(int nRow, ChainItem <T> startFrom) { ChainItem <T> pCur = startFrom; while (pCur != null && pCur.row != nRow) { pCur = pCur.next; } return(pCur); }
public List <ChainItem <T> > ToListItems() { List <ChainItem <T> > result = new List <ChainItem <T> >(); ChainItem <T> pCur = pHead; while (pCur != null) { result.Add(pCur); pCur = pCur.next; } return(result); }
//==================================================================== //Get the tail Element buffer and return the count of elements //==================================================================== public int GetTail(out ChainItem <T> pTailRet) { ChainItem <T> pCur = pHead, pPrev = null; int nCount = 0; while (pCur != null) { nCount++; pPrev = pCur; pCur = pCur.next; } pTailRet = pPrev; return(nCount); }
public static ColumnFirstDynamicArray <ChainContent> BackwardOptimize(ColumnFirstDynamicArray <ChainContent> test) { ChainItem <ChainContent> pCur = test.GetHead(); StringBuilder sb = new StringBuilder(); while (pCur != null) { double multiNum = Math.Pow(backNum, pCur.col); pCur.Content.eWeight *= multiNum; pCur = pCur.next; } return(test); }
public override string ToString() { StringBuilder sb = new StringBuilder(); ChainItem <T> pCur = pHead; while (pCur != null) { sb.Append(string.Format("row:{0,3}, col:{1,3}, ", pCur.row, pCur.col)); sb.Append(pCur.Content.ToString()); sb.Append("\r\n"); pCur = pCur.next; } return(sb.ToString()); }
//==================================================================== // 设置或插入一个新的结点 //==================================================================== public override void SetElement(int nRow, int nCol, T content) { ChainItem <T> pCur = pHead, pPre = null, pNew; //The pointer of array chain if (nRow > RowCount) //Set the array row { RowCount = nRow; } if (nCol > ColumnCount)//Set the array col { ColumnCount = nCol; } while (pCur != null && (pCur.col < nCol || (pCur.col == nCol && pCur.row < nRow))) { pPre = pCur; pCur = pCur.next; } if (pCur != null && pCur.row == nRow && pCur.col == nCol) //Find the same position { pCur.Content = content; //Set the value } else { pNew = new ChainItem <T>();//malloc a new node pNew.col = nCol; pNew.row = nRow; pNew.Content = content; pNew.next = pCur; if (pPre == null)//link pNew after the pPre { pHead = pNew; } else { pPre.next = pNew; } } }
public int ColumnCount, RowCount; //The row and col of the array #region Constructor public DynamicArray() { pHead = null; RowCount = 0; ColumnCount = 0; }
//==================================================================== // Set Empty //==================================================================== public void SetEmpty() { pHead = null; ColumnCount = 0; RowCount = 0; }