Esempio n. 1
0
        //====================================================================
        // 查找行、列值为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);
        }
Esempio n. 3
0
        //====================================================================
        // 从 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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        //====================================================================
        //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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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;
                }
            }
        }
Esempio n. 9
0
        public int ColumnCount, RowCount; //The row and col of the array

        #region Constructor

        public DynamicArray()
        {
            pHead       = null;
            RowCount    = 0;
            ColumnCount = 0;
        }
Esempio n. 10
0
 //====================================================================
 // Set Empty
 //====================================================================
 public void SetEmpty()
 {
     pHead       = null;
     ColumnCount = 0;
     RowCount    = 0;
 }