數據結構c語言版嚴蔚敏答案
1、newBase
=
(ElemType
*)
realloc
(L.elem,
(L.listsize
+
LISTINCREMENT)
*
sizeof(ElemType));
//為初始
順序表
以LISTINCREMENT
大小
重新增加存儲空間,如果去掉L.elem,則新增
空間
的對象不明。
2、增加分配的
代碼
意思是,在當前分配空間不足時加ListIncrement大小的空間,不夠再加,一直加到空間夠用為止,於是就保證了分配的空間足夠用了。3、順序表是從0號位置開始計數的,所以
長度
為Length順序表最後一位為Length-1,同樣,第i個
元素
的位置也就為[i-1]了。4、
源代碼
段尋找位置的
原理
是先讓一個
指針
q指向要插入數的位置,指針p指向表尾[Length-1],然後比較p,q的值,如果p>=q,就把p指向的元素向後挪一位[Length](也就是表長加1了),P就指向倒數第二個[Length-2]位置;再用p,q做個比較,如果p仍然大於或等於q,那麼繼續吧p指向的數向後挪一位[Length-1],p又指向下一個數[Length-3],以此內推,
直到最後
p指向第[i-2]那位,此時第[i-1]就為空的,正好把要插入的數插進去。你所給的
演算法
,首先把位置和長度都搞錯了,你的意思可能是這樣的吧:for(p=&L.elem[i-1];p<=&L.elem[L.length-1];++p)
{
*(p+1)=*p;
Length++;}如果是這樣的話,那不僅你要插的元素插不進去,反而把從[i-1]位置開始後面所有的元素都被復製成了L.elem[i-1]相同的元素了。
B. 求《數據結構》(C語言,第二版) 嚴蔚敏、吳偉民主編,清華大學出版社 課後習題答案
http://wenku..com/link?url=-wmTox3c-s9Pk6r0MyGk1N6YqJu-Fya9-LrzhksZfVTfM0R09K9kzLVq9d4_AtX-ZXlPWuZC
C. Data Structures and Algorithm Analysis in C++書後的習題答案
下面是我根據別人的提示和自己的參考總結出的幾個階段的書籍,希望對你有幫助!!
第一階段:
1::H.M.Deitel和P.J.Deitel的《 C++ How to Program 》(C++大學教程)
2:: 錢能的《C++程序設計教程》
3::Stanley B.lippman著 侯捷 譯的《essential c++》
4::Stanley B.Lippman,Josee LaJoie,Barbara E.Moo的《c++ primer》
5::Bjarne Stroustrup的《the c++ programming language》
第二階段:
1::Scott Meyers的《effective c++》
2::Herb Sutter的《exceptional c++》
3::Scott Meyers的《more effective c++》
4::Herb Sutter的《more exceptional c++》
第三階段:
1::Stanley B.lippman的《insied the c++ object model》(深度探索C++ 對象模型)
2::Bjarne Stroustrup的《The design and evolution of c++》(C++的設 計與演化)
3::tephen C. Dewhurst的《C++ Gotchas: Avoiding Common Problems in Coding and Design》(C++程序設計陷阱)
第四階段:
1:: Nicolai M.Josuttis的《the c++ standard library》(C++標准程序庫 —自修教程與參考手冊)
2::Scott Meyers的《effective stl》
3::Matthew H. Austern的《generic programming and the stl》(泛型編 程與STL)
4::侯捷的 《stl源碼剖析》
第五階段:
1::Herb Sutter的《exeptional c++ style》
2::《c++ template》
3::Andrei Alexandrescu的《modern c++ design》
第六階段
1::《C++ 輸入輸出流及本地化》《C++ Network Programming》《大規模C++程序設計》
2::Barbara E.Moo和Andrew Koenig的《Ruminations On C++》(C++ 沉思錄)
其他的:
Stanley B. Lippman,《Inside The C++ Object Model》影印版、中文版《深度探索C++對象模型》
Elements of Reusable Object-Oriented software》影印版、中文版《設計模式:可復用面向對象軟體的基礎》
John Lakos的著作《Large-Scale C++ Software Design》(《大規模C++程序設計》
Andrew Koenig和Barbara Moo在《Accelerated C++: Practical Programming by Example》《Ruminations on C++》
Bruce Eckel,《C++編程思想》
windows編程系列:
Charles Petzold 的 《Programming Windows》(Windows程序設計)
Jeffrey Richter 的《》(Windows核心編程)和《Advanced Windows》(Windows 高級編程指南)
數據結構和演算法
1::清華教授嚴蔚敏和廣東工業大學教授吳偉民的《數據結構(C語言版)》
2::清華教授殷人昆的《數據結構(用面向對象方法與C++描述)》
3::經典書籍:Mark Allen Weiss的《Data Structures and Algorithm Analysis in C》(數據結構與演算法分析--C語言描述)和《Data Structures and Algorithm Analysis in C++》(數據結構與演算法分析--C++語言描述)
4::王曉東的《演算法設計與分析》
5::M.H.Alsuwaiyel(沙特)的 《Algorithms Design Techniques and Analysis》(演算法設計技巧與分析)
6::經典:Thomas H.Cormen, Charles E.Leiserson的《Introction to Algorithms》(演算法導論)
另外,虛機團上產品團購,超級便宜
D. 嚴蔚敏《數據結構題集》(c語言版)詳細答案!
這個在網上還是比較好找的,以前看數據結構的時候也頭疼的很,但不用把整本習題集看完的,太費時間了。下載地址1:http://ishare.iask.sina.com.cn/f/7049195.html?from=like
下載地址2:http://ishare.iask.sina.com.cn/f/5078931.html?from=like
新浪共享網的資源 ,可以直接在上面搜想要的資料,有很多是免費的呦。。。。。。
E. 嚴蔚敏的數據結構(C語言版)最短路徑演算法 代碼段:p[w]=p[v];p[w][w]=true;//p[w]=p[v]+[w]是什麼意思
二維數組P中保存的是v0到各個點的最短路徑。在v行中,值為true的列連起來,就是v0到v的最短路徑。因為v0到w點的最短路徑是v0到v的最短路徑在加上<v,w>,所以w列先復制所有的v列的值,然後在將p[w][w]=true。此時w行中所有值為true列,就是v0到w的最短路徑
F. 嚴蔚敏數據結構題集(C語言版)實習題答案
/* 用鄰接矩陣表示的圖的prim演算法的源程序*/
#include<stdio.h>
#define MAXVEX 6
typedef char VexType;
typedef float AdjType;
typedef struct {
int n; /* 圖的頂點個數 */
/*VexType vexs[MAXVEX]; 頂點信息 */
AdjType arcs[MAXVEX][MAXVEX]; /* 邊信息 */
} GraphMatrix;
typedef struct{
int start_vex, stop_vex; /* 邊的起點和終點 */
AdjType weight; /* 邊的權 */
} Edge;
Edge mst[5];
#define MAX 1e+8
void prim(GraphMatrix * pgraph, Edge mst[]) {
int i, j, min, vx, vy;
float weight, minweight; Edge edge;
for (i = 0; i < pgraph->n-1; i++) {
mst[i].start_vex = 0;
mst[i].stop_vex = i+1;
mst[i].weight = pgraph->arcs[0][i+1];
}
for (i = 0; i < pgraph->n-1; i++) { /* 共n-1條邊 */
minweight = MAX; min = i;
for (j = i; j < pgraph->n-1; j++)/* 從所有邊(vx,vy)(vx∈U,vy∈V-U)中選出最短的邊 */
if(mst[j].weight < minweight) {
minweight = mst[j].weight;
min = j;
}
/* mst[min]是最短的邊(vx,vy)(vx∈U, vy∈V-U),將mst[min]加入最小生成樹 */
edge = mst[min];
mst[min] = mst[i];
mst[i] = edge;
vx = mst[i].stop_vex; /* vx為剛加入最小生成樹的頂點的下標 */
for(j = i+1; j < pgraph->n-1; j++) { /* 調整mst[i+1]到mst[n-1] */
vy=mst[j].stop_vex; weight = pgraph->arcs[vx][vy];
if (weight < mst[j].weight) {
mst[j].weight = weight;
mst[j].start_vex = vx;
}
}
}
}
GraphMatrix graph = {
6,
{{0,10,MAX,MAX,19,21},
{10,0,5,6,MAX,11},
{MAX,5,0,6,MAX,MAX},
{MAX,6,6,0,18,14},
{19,MAX,MAX,18,0,33},
{21,11,MAX,14,33,0}
}
};
int main(){
int i;
prim(&graph,mst);
for (i = 0; i < graph.n-1; i++)
printf("(%d %d %.0f)\n", mst[i].start_vex,
mst[i].stop_vex, mst[i].weight);
return 0;
}