C#數(shù)據(jù)結(jié)構(gòu)之順序表操作
由于工作和別的原因,代碼寫(xiě)得很不規(guī)范,但我自己把下面的方法塊都測(cè)試了下沒(méi)發(fā)現(xiàn)錯(cuò)誤。
如果你在學(xué)習(xí)中發(fā)現(xiàn)我的方法有什么錯(cuò)誤請(qǐng)留下你寶貴的意見(jiàn)。
C#數(shù)據(jù)結(jié)構(gòu)線性表的定義:
n個(gè)數(shù)據(jù)元素的有限序列(線性表的數(shù)據(jù)元素在不同的環(huán)境下具體含義可以不同,但在同一線性表中的元素性質(zhì)必須相同)。
表長(zhǎng):線性表中數(shù)據(jù)元素的個(gè)數(shù)n(n>=0)。
空表:n=0時(shí)的線性表稱為空表。
位序:非空表中數(shù)據(jù)元素ai是此表的第i個(gè)元素,則稱i為ai在線性表中的位序。
線性表的結(jié)構(gòu)特點(diǎn):在數(shù)據(jù)元素的非空有限集中有如下規(guī)則
1.存在唯一的一個(gè)被稱作“第一個(gè)”的數(shù)據(jù)元素
2.存在唯一的一個(gè)被稱作“最后一個(gè)”的數(shù)據(jù)元素
3.除第一個(gè)外,集合中的每個(gè)數(shù)據(jù)元素均只有一個(gè)前驅(qū)
4.除最后一個(gè)外,集合中的每個(gè)數(shù)據(jù)元素均只有一個(gè)后繼
C#數(shù)據(jù)結(jié)構(gòu)線性表的運(yùn)算:
1.取元素:求線性表中指定數(shù)據(jù)元素的位序。
2.插入:在線性表兩個(gè)確定的元素之間插入一個(gè)新的數(shù)據(jù)元素。
3.刪除:刪除表中某個(gè)數(shù)據(jù)元素。
4.求表長(zhǎng):求線性表中數(shù)據(jù)元素的個(gè)數(shù)。
5.查找:查找表中滿足某種條件的數(shù)據(jù)元素。
6.合并:把兩個(gè)線性表合并成一個(gè)線性表。
7.分拆:把一個(gè)線性表分拆成多個(gè)線性表。
8.排序:按一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)值的遞增或遞減次序重新排列表中數(shù)據(jù)元素。
在C#數(shù)據(jù)結(jié)構(gòu)線性表中最常見(jiàn)的是順序表,我寫(xiě)了一個(gè)關(guān)于順序表的基本操作的類,代碼我貼在下面:
- usingSystem;
- usingSystem.Collections.Generic;
- usingSystem.Text;
- namespaceclassfile
- {
- classsxb
- {
- publicconstintdefaultsize=100;/*定義順序表的默認(rèn)元素?cái)?shù)目為1000*/
- publicintmaxsize;
- publicintsize;
- publicint[]list;
- //定義x,y的變量
- publicint_x;
- publicint_y;
- //定義x,y的屬性
- //publicintx
- //{
- //get{return_x;}
- //set{return_x=value;}
- //}
- //publicinty
- //{
- //get{return_y;}
- //set{return_y=value;}
- //}
- publicsxb()
- {
- initiatelist(defaultsize);
- }
- publicsxb(intsize)
- {
- initiatelist(size);
- }
- //初始化順序表
- publicvoidinitiatelist(intsz)
- {
- maxsize=sz;
- size=0;
- list=newint[sz];
- }
- //順序表插入算法,無(wú)返回值
- publicvoidinsertsxb(inti,intx)
- {
- if(size==maxsize)
- {
- thrownewException("順序表已滿,無(wú)法插入!");
- }
- if(i<0||i>size)
- {
- thrownewException("參數(shù)錯(cuò)誤!");
- }
- for(intj=size-1;j>=i-1;j--)
- {
- list[j+1]=list[j];//改成list[j]=list[j-1]
- }
- list[i-1]=x;
- //size是線行表的長(zhǎng)度大小數(shù)據(jù)插入長(zhǎng)度要+1
- size++;
- }
- //定義刪除順序表中x--y間元素的方法
- publicintDeleteXY(intx,inty)
- {
- for(inti=_x;i<_y;i++)
- {
- }
- return0;
- }
- //順序表刪除算法,返回刪除的元素
- publicintdelete(inti)
- {
- //size是線行表的長(zhǎng)度大小
- if(size==0)
- {
- thrownewException("順序表已為空無(wú)法刪除!");
- }
- if(i<0||i>size-1)
- {
- thrownewException("參數(shù)錯(cuò)誤!");
- }
- intit=list[i];
- for(intj=i;j<size-1;j++)
- {
- list[j]=list[j+1];
- }
- size--;
- returnit;
- }
- //獲取順序表的元素i,返加元素i的值
- publicintgetdata(inti)
- {
- if(i<0||i>=size)
- {
- thrownewException("參數(shù)錯(cuò)誤!");
- }
- returnlist[i];
- }
- //獲取順序表的長(zhǎng)度
- publicintsizelist()
- {
- returnsize;
- }
- //判斷順序表是否為空,為空返回true,否則返回false
- publicboolisempty()
- {
- returnsize==0;
- }
- //請(qǐng)問(wèn):該函數(shù)的功能???
- publicintmoredatadelete(sxbl,intx)
- {
- inti;
- inttag=0;
- for(i=0;i<l.size;i++)
- {
- if(x.Equals(l.getdata(i)))
- {
- l.delete(i);
- i--;
- tag=1;
- }
- }
- returntag;
- }
- }
- }
【編輯推薦】