




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)結(jié)構(gòu)主講人:米曉紅hongxiaomi@163.com
線性表習(xí)題課1)在非空的線性表,有且僅有一個(gè)開始結(jié)點(diǎn)a1,它沒有直接前趨,而僅有一個(gè)直接后繼a22)有且僅有一個(gè)終端結(jié)點(diǎn)an,它沒有直接后繼,而僅有一個(gè)直接前趨an-1;3)其余的內(nèi)部結(jié)點(diǎn)ai(2in-1)都有且僅有一個(gè)直接前趨ai-1和一個(gè)直接后繼ai+1。1、線性表的邏輯特征:一、要點(diǎn)回顧d1d2d3d4d5d6d72、線性表的順序表示和實(shí)現(xiàn)#defineLIST_INIT_SIZE100#defineLISTINCREMENT10typedefstruct{ElemType*elem;intlength;intlistsize;
}Sqlist;(1)存儲(chǔ)結(jié)構(gòu)的定義(2)操作的實(shí)現(xiàn)StatusListInsert_Sq(SqList&L,inti,ElemTypee){
//
在順序表L的第i個(gè)元素之前插入新的元素eIf(i<1||i>L.Length+1)returnERROR;if(L.length>=L.listsize){newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase)exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMENT;
}q=&(L.elem[i-1]);//q指示插入位置for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;//插入位置及之后的元素右移*q=e;++L.length;//表長(zhǎng)增1return
OK;}//ListInsert_SqStatusListDelete_sq(Sqlist&L,inti,ElemType&e){//在順序線性表L中刪除第i個(gè)元素,并用e返回其值
if(i<1||i>L.length)returnERROR;p=&(L.Elem[i-1]);//p指示刪除位置e=*p;q=L.elem+L.length-1;//q指示表尾位置for(++p;p<=q;++p)*(p-1)=*p;//刪除位置之后元素前移L.length--;//表長(zhǎng)減1returnOK;}//ListDelete_sqStatusLocateElem_sq(SqListL,ElemTypee){//在順序表中查找第一個(gè)值為e的元素的位序
i=1;p=L.elem;while(i<=L.length&&(*p++!=e))++i;if(i<=L.length)returni;elsereturn0;}//LocateElem_sq3、線性表的單鏈表存儲(chǔ)結(jié)構(gòu)typedefstructLNode{Elemtypedata;structLNode*next;}Lnode,*LinkList;(1)存儲(chǔ)結(jié)構(gòu)的定義(2)操作的實(shí)現(xiàn)StatusGetElem_L(LinkListL,inti,ElemType&e){//L為帶頭結(jié)點(diǎn)的單鏈表的頭指針//取第i個(gè)元素
p=L->next;j=1;while(p&&j<i){p=p->next;++j;}if(!p||j>i)returnERROR;
e=p->data;returnOK;}//GetElem_LStatusListInsert_L(LinkList&L,inti,ElemTypee){//在帶頭結(jié)點(diǎn)的單鏈表L中第i個(gè)位置之前插入元素e
p=L;j=0;while(p&&j<i-1){p=p->next;++j;}//尋找第i-1個(gè)結(jié)點(diǎn)if(!p||j>i-1)return
ERROR;
s=(LinkList)malloc(sizeof(Lnode));s->data=e;s->next=p->next;p->next=s;returnOK;}//ListInsert_LStatusListDelete_L(LinkList&L,inti,ElemType&e){//在帶頭結(jié)點(diǎn)的單鏈表L中,刪除第i個(gè)元素,并用e返回p=L;j=0;while(p->next&&j<i-1){//尋找第i個(gè)結(jié)點(diǎn),并令p指向其前驅(qū)
p=p->next;++j;}if(!(p->next)||j>i-1)returnERROR;
q=p->next;p->next=q->next;e=q->data;free(q);returnOK;}//ListDelete_L
voidCreateList_L(LinkList&L,intn){//逆位序輸入n個(gè)元素的值,建立帶頭結(jié)點(diǎn)的單鏈表
L=(LinkList)malloc(sizeof)(LNode));L->next=NULL;for(i=n;i>0;i--){p=(LinkList)malloc(sizeof)(LNode));scanf(&p->data);p->next=L->next;L->next=p;
}}//CreatList_LStatusInsert_SqList(SqList&va,intx)//把x插入遞增有序表va中
{
if(va.length==va.listsize)return(OVERFLOW);
for(i=va.length-1;va.elem[i]>x&&i>=0;i--)
va.elem[i+1]=va.elem[i];
va.elem[i+1]=x;
va.length++;
returnOK;
}//Insert_SqList2.11設(shè)順序表va中的數(shù)據(jù)元素遞增有序。試編寫一算法,將x插入到順序表的適當(dāng)位置上,以保持該表的有序性。二、作業(yè)點(diǎn)評(píng)2.14試寫一算法在帶頭結(jié)點(diǎn)的單鏈表結(jié)構(gòu)上實(shí)現(xiàn)線性表操作LENGTH(L)。intLength(LinkListL)//求鏈表的長(zhǎng)度{p=L->next;k=0;while(p){p=p->next;k++;}returnk;}
2.19已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲(chǔ)結(jié)構(gòu)。試寫一高效的算法,刪除表中所有值大于mink且小于maxk的元素(若表中存在這樣的元素)同時(shí)釋放被刪結(jié)點(diǎn)空間,并分析算法時(shí)間復(fù)雜度(mink和maxk是給定參變量)StatusDelete_Between(Linklist&L,intmink,intmaxk){//刪除遞增鏈表L中值大于mink且小于maxk的所有元素if(L!=NULL){q=L;p=L->next;}while(p!=NULL&&p->data<=mink){q=p;p=p->next;}while(p!=NULL&&p->data<maxk){r=p;p=p->next;free(r);}q->next=p;returnOK;}//Delete_Between三、習(xí)題講解例1、已知線性表中元素?zé)o序,且采用帶頭結(jié)點(diǎn)的單鏈表存儲(chǔ)結(jié)構(gòu),要求刪除所有大于min且小于max的結(jié)點(diǎn)。StatusDelete_Between(Linklist&L,intmink,intmaxk){//刪除無序單鏈表中所有大于min且小于max的結(jié)點(diǎn)q=head;p=q->next;while(p){if(p->data<=mink||p->data>=maxk){q=p;p=p->next;}else{q-next=p->next;free(p);}p=q->next;}returnOK;}//Delete_Between例2、有一單鏈表(不帶頭結(jié)點(diǎn))頭指針為head,試設(shè)計(jì)一算法使得單鏈表插入x后仍遞增有序。StatusInsert(Linklist&head,Elemtypex){//不帶頭結(jié)點(diǎn)單鏈表插入x后仍遞增有序s=(LinkList)malloc(sizeof(Lnode));s->data=x;s->next=NULL;if(head=NULL||x<head->data){s->next=head;head=s;}else{q=head;p=head->next;while(p!=NULL&&p->data<x){q=p;p=p->next;}s->next=p;q->next=s;}returnOK;}//InsertStatusInsert(Linklist&head,Elemtypex){//帶頭結(jié)點(diǎn)單鏈表插入x后仍遞增有序s=(LinkList)malloc(sizeof(Lnode));s->data=x;s->next=NULL;q=head;p=head->next;if(p!=NULL&&p->data<x){q=p;p=p->next;}s->next=p;q->next=s;returnOK;}//Insert例3、試分別以不同的存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)線性表的就地逆轉(zhuǎn)算法,即在原表的存儲(chǔ)空間內(nèi)將線性表(a1,a2,...,an)逆置為(an,an-1,...,a1)。
(1)順序存儲(chǔ)結(jié)構(gòu)//結(jié)構(gòu)類型定義:
#defineLIST_INIT_SIZE100#defineLISTINCREMENT10typedefstruct{ElemType*elem;intlength;intlistsize;
}Sqlist;
//算法voidreverse(SqList&L){//順序表的就地逆置
for(i=1,j=L.length-1;i<j;i++,j--)
{
temp=L.elem[i];L.elem[i]=L.elem[j];L.elem[j]=temp;}//reverse(2)鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)—單鏈表//結(jié)構(gòu)類型定義:typedefstructLNode{Elemtypedata;structLNode*next;}Lnode,*LinkList;void
convert(linklist
head){
//帶頭結(jié)點(diǎn)的單鏈表head就地逆置
LNode
*p,
*q;
p=head->next;
//指向開始結(jié)點(diǎn)
head->next=NULL;
//逆置后初表為空
while(p)
//p為NULL,表示已經(jīng)全部逆置
{q=p->next;
//p指向下一個(gè)需要逆置的結(jié)點(diǎn)
p->next=head->next;
//將需要逆置結(jié)點(diǎn)插入頭結(jié)點(diǎn)后面
head->next=p;p=q;}returnOK;
}//convert
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年科學(xué)教育與科技創(chuàng)新考核試題及答案
- 2025年跨境電商從業(yè)資格考試試卷及答案
- 快遞轉(zhuǎn)租合同協(xié)議書模板
- 快餐合作經(jīng)營(yíng)協(xié)議書范本
- 商會(huì)水泥銷售合同協(xié)議
- 總代理合作合同協(xié)議
- 2025年中華人民共和國國家房屋租賃合同標(biāo)準(zhǔn)文本
- 德邦物流聘用合同協(xié)議
- 品牌合作協(xié)議書合同協(xié)議
- 民宿分割銷售合同協(xié)議
- 2025浙江溫州市公用事業(yè)發(fā)展集團(tuán)有限公司招聘54人(第一批)筆試參考題庫附帶答案詳解
- 《超重問題與健康對(duì)策》課件
- 陜西、山西省天一大聯(lián)考2024-2025學(xué)年高中畢業(yè)班階段性測(cè)試(七)歷史試題及答案
- 高中數(shù)學(xué)不等式教學(xué)中的認(rèn)知障礙診斷與干預(yù)機(jī)制研究
- 2025儀征市眾鑫建設(shè)開發(fā)有限公司筆試試題
- 游泳池安全保障制度和措施
- 2024-2025學(xué)年教科版科學(xué)一年級(jí)下冊(cè) 1.6.哪個(gè)流動(dòng)得快 教學(xué)課件
- 人教版(PEP)2024-2025六年級(jí)下冊(cè)英語期中測(cè)試卷(含答案含聽力原文無聽力音頻)
- 生態(tài)安全主題班會(huì)課件
- 消防氣防培訓(xùn)
- 2025年湖南省各市州農(nóng)電服務(wù)有限公司招聘筆試參考題庫含答案解析
評(píng)論
0/150
提交評(píng)論