《資料結構題集》答案第2章線性表

2021-03-04 09:55:29 字數 2817 閱讀 9985

第二章線性表

2.10

status deletek(sqlist &a,int i,int k)//刪除線性表a中第i個元素起的k個元素

//deletek

2.11

status insert_sqlist(sqlist &va,int x)//把x插入遞增有序表va中

//insert_sqlist

2.12

int list***p(sqlist a,sqlist b)//比較字元表a和b,並用返回值表示結果,值為1,表示a>b;值為-1,表示ab.elem[i]?1:-1;

if(a.length==b.length) return 0;

return a.length>b.length?1:-1;//當兩個字元表可以互相比較的部分完全相同時,哪個較長,哪個就較大

}//list***p

2.13

lnode* locate(linklist l,int x)//鍊錶上的元素查詢,返回指標

//locate

2.14

int length(linklist l)//求鍊錶的長度

//length

2.15

void listconcat(linklist ha,linklist hb,linklist &hc)//把鍊錶hb接在ha後面形成鍊錶hc

//listconcat

2.16

見書後答案.

2.17

status insert(linklist &l,int i,int b)//在無頭結點鍊錶l的第i個元素之前插入元素b

else

}//insert

2.18

status delete(linklist &l,int i)//在無頭結點鍊錶l中刪除第i個元素

}//delete

2.19

status delete_between(linklist &l,int mink,int maxk)//刪除元素遞增排列的鍊錶l中值大於mink且小於maxk的所有元素

}//delete_between

2.20

status delete_equal(linklist &l)//刪除元素遞增排列的鍊錶l中所有值相同的元素

else

p->next=q;p=q;q=p->next; //當相鄰元素相等時刪除多餘元素

}//else

}//while

}//delete_equal

2.21

void reverse(sqlist &a)//順序表的就地逆置

//reverse

2.22

void linklist_reverse(linklist &l)//鍊錶的就地逆置;為簡化演算法,假設表長大於2

q->next=p;s->next=q;l->next=s;

}//linklist_reverse

分析:本演算法的思想是,逐個地把l的當前元素q插入新的鍊錶頭部,p為新表表頭.

2.23

void merge1(linklist &a,linklist &b,linklist &c)//把鍊錶a和b合併為c,a和b的元素間隔排列,且使用原儲存空間

p=s;q=t;

}//while

}//merge1

2.24

void reverse_merge(linklist &a,linklist &b,linklist &c)//把元素遞增排列的鍊錶a和b合併為c,且c中元素遞減排列,使用原空間

else

pre=pc;

}c=a;a->next=pc; //構造新表頭

}//reverse_merge

分析:本演算法的思想是,按從小到大的順序依次把a和b的元素插入新錶的頭部pc處,最後處理a或b的剩餘元素.

2.25

void sqlist_intersect(sqlist a,sqlist b,sqlist &c)//求元素遞增排列的線性表a和b的元素的交集並存入c中

}//while

}//sqlist_intersect

2.26

void linklist_intersect(linklist a,linklist b,linklist &c)//在鍊錶結構上重做上題

}//while

}//linklist_intersect

2.27

void sqlist_intersect_true(sqlist &a,sqlist b)//求元素遞增排列的線性表a和b的元素的交集並存回a中

else

}//while

while(a.elem[k]) a.elem[k++]=0;

}//sqlist_intersect_true

2.28

void linklist_intersect_true(linklist &a,linklist b)//在鍊錶結構上重做上題

}//while

}//linklist_intersect_true

2.29

void sqlist_intersect_delete(sqlist &a,sqlist b,sqlist c)

}//while

while(i

a.elem[m++]=a.elem[ia的剩餘元素重新儲存。

a.length=m;

}// sqlist_intersect_delete

分析:先從b和c中找出共有元素,記為same,再在a中從當前位置開始, 凡小於same的

元素均保留(存到新的位置),等於same的就跳過,到大於same時就再找下乙個same.

資料結構第2章線性表答案

第2章自測卷答案姓名班級 一 填空 每空1分,共13分 1.嚴題集2.2 在順序表中插入或刪除乙個元素,需要平均移動表中一半元素,具體移動的元素個數與表長和該元素在表中的位置有關。2.線性表中結點的集合是有限的,結點間的關係是一對一的。3.向乙個長度為n的向量的第i個元素 1 i n 1 之前插入乙...

資料結構 第2章線性表

第2章線性表 一選擇題 1 下述哪一條是順序儲存結構的優點?北方交通大學 2001 一 4 2分 a 儲存密度大 b 插入運算方便 c 刪除運算方便 d 可方便地用於各種邏輯結構的儲存表示 2 下面關於線性表的敘述中,錯誤的是哪乙個?北方交通大學 2001 一 14 2分 a 線性表採用順序儲存,必...

資料結構第2章線性表

第2章線性表自測卷 一 填空 1.在順序表中插入或刪除乙個元素,需要平均移動元素,具體移動的元素個數 與有關。2.線性表中結點的集合是的,結點間的關係是的。3.向乙個長度為n的向量的第i個元素 1 i n 1 之前插入乙個元素時,需向後移動個元素。4.向乙個長度為n的向量中刪除第i個元素 1 i n...