数据结构与算法_第1页
数据结构与算法_第2页
数据结构与算法_第3页
数据结构与算法_第4页
数据结构与算法_第5页
已阅读5页,还剩17页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章数组1线性查找2二分查找表2焉用大。表示法表示运行时间算法犬0爰示沬表示的运佇时间St性4找XN)二井查itOdogN)无序融坦的播入g有序数组的捕入OOT无序數组的別除有序数塩的刑除O(N)圏2 9显示一些时同与数据以牛故的大0关系.逋廷它找忖可以比較不同的大0值非常主 观人0是优秀,O(kgN)是良好,0(刃是还可乩0(巧则差一些了. 0(声)会在本书后面的冒泡 排序和其他某些算法中出现争大0表云法的实嵐并干是对运行时间给出实际價,而是篆达了运行时间是如何受数据项个数所 匪响的*險了实乐安装后真正吉测董一次偉法的运行时闾之外,这可能是对算法进冇比有意 炭的方袪了a小结 Java 的数

2、组是时象,fi new ft作符创建 无序数组可以提俱快速的插入,但音找和删除较慢口 将数组封装到类中可以保沪数组不被随意更改. 类的誉口由类用户可访问的方尬有时还有字段】纽成 类的接口玻设计成使类月户的操作更加简单 有序致組可以使用二分査找。 以B为底A的对数大概是在结果小于I之匍用除A的次数线性背找需娶的时间与数组中数据攻的个数成正比& 二分直找需要的时间与教组中数据项的个教的对数成正比 大0表示法为比较算法的速度提供了一种方便的方 O级时问的算法是最好的.。伽備)次乙Q(Nj为一股* 0(川)最芳第三章简单排序1冒泡排序一股来说.菽组中有K个数据项.処第“通排序中有N-1次比较,第二趟中

3、N-2次,如业 类推b这种序列的求和吿式如下;(N- 1MN -2 )+(N-3+ +1 册(N -1X2当N为10时,N*(J-iy2等干45側昭这柱,算法作了绅衣比较t忽略减I.不会有根大差別,特别是肖*很大时)。因为两个竖条只有在需童时才交换.所以兗换的挟数少于比较茅次数.卯果数据是随机的.那 么次概有一半数番需要交换,刘交换前次藪为N叽C年过在聂坏的惰况下,职初始數堀逆序时. 每次比较都需要交换J交罠却比较漠作抚散都和代成止比.由于常教不算在丈0表示法中可以忽略2和井艮认対冒泡排序运行需要厲屮)时阖级别*100个竖条的BubbleSon applet可以证实.这种排序算法的速度是根慢的

4、:无论何吋,只要看到一个循坏嵌套在另“牛循环里.例如在昌幽排序和本章中的其皑按梓翼法 中,就可叫怀疑这介算法的远行时间为0()颔,外层犢牙执行NEJ:,内部循环对于拒一次外展循 环殊执fjN次【就奄几分之N次人这就意啸看将尢釣需要执厅N*N或者用按某,基木操作.选择排序选择排序的效率选择排序期冒他排*执行了相同软艱的比较;N*(N-lj/2e对于W牛数据项崙耍北枚比校 然而,10牛数据项只需要少于10次交换。对于100个数魏项*帝要斗950袂比较但只进汀r平到 100 的交糕。N值很大时.比较的択数屋主耳的!所以结论是选择排序和旨帼排序 样运行了 0 (祁)时间.也是,选捧摔序无疑更快、因为它

5、进行的交換少睜多。当N佶换小时,特别是如哩交 桅的武阖级比比较的时问蜒大得多时.选择捋序实际上是相当快的.插入排序小结-木审提到的挂序釁法都假定了数组柞曲数搦存储結构 排序包摘比较数组中数据项的关键字和移动相应的数關顼(实际上,是数据项的引用), 直到它们捷好申为止。 本章胖有算注的时间复杂度都是00!纭不过,慕些悄炭下某个算祛可以比英他算法快很 多a 不喪性是拾在筒法运疔时保持不变的秦杵。 岂袍摊序算法是效率最弟的算法I退它蓬椅单, 插入排序第徒是本草介绍的捶序算注中凰用最雾的,如果具有相同关犍字的数据项,軽过排序它们的煎序保持不变.这样的母序就 是赛定的. 本斎介绍的所有排序算怯除了需要初

6、绘数宓之外.都貝需要一个醸叶变量招第四章栈和队列1栈和队列:栈:后进先出,栈只允许在表尾一端进行插入和删除队列:先进先出,只允许在表尾一端进行插入,在表头一端进行删除第五章链表1. 自引用class Linkpublic int iData;public double dData;public Link n ext;类型为Link的next字段仅仅是对另外一个Link对象的引用,而不是一个对象。一个引用是一个对某个对象的参照数值,它是计算机内存中的对象地址。2. 单链表 LinkList2App.java3. 双端链表public void insertFirstllcn; dd) / ins

7、ert at front of list1Lifik newLink 二 nwr Linked);/ faki rew Linklast newt ink; newLirtk.next = firit; first = newLUik; )/ if eupty list,/ newLink oLd irst /I first rewLinkpublic void insertLast(long dd) Link nmvlink - new Li林 iff ME叩ty() first - newLxnk;else” insert rt enj of Int/ nake new link/ If

8、erpty list,11 firt newLlnklast.nflxt - newlink; last H nsvllnH;1/ oLd last oewLinh / neNtiAk lastpublic long d*lstaFirit()lonfl teiM)* first dOata; if | firsts txt = null) lMt null;fLrit first.next; return teip;打 dalatt first link/ (bssums nori-eupty 山t)II if only one LtennH null Last/ first j old n

9、ext4. 链表的效率/I insert, in orderIf make new link/ start at firstIf until end of list, current.dDataJfl or key current,f! go to Mxt itemI) at beginning of list l first rawLink /not at beginning/1 old prev neLinfc / ntwLink - oU current链表的效率在表头插入利删除速度很快仅需要SS-ftt引用殖,所以花费0(1)的时间。舉均起来,杳找、剧除和在揭定琏结点后面插入都需要搜索

10、链表中的亠半犍堵点.於要0(N) 次出较.在数组中执行这些操作也需要ex用次出较但堆链表仍然要快一些因为当插扎和刪涂链 结点时琵表不需要移踰任何东西。增加的效率是碾显着的,摒别是当复制时间远远大于比较对同 的时協当感軽表比粧组优越的另外一个重要方面是琏表需要多少内存就可以用多少内存,井且可以 扩展到所有可用内有。数组的大小在它创建的时候戡固定了*所以紐常由于数组太大导致效率低下, 或君掘组丈小导致空间镒也“向*是一种可扩展的數组它可以通过可变丧度解决这个何题.但是 它疑常只允许哦僵定大小的增昼扩趣:胡如快變潘出俞时候就增加一倍数组容量人这个牌諛方 案在内存使用奴率上来说还是養比轻表的低。5.

11、有序链表public void insert(lono key)Link nwLlnk = new Link (key);Link previous null;Link current - fir&t;while(current != null U key previous - current;叫rrent = current.next;if (previous=nu11)first = newiink; elseprevious, next = rnwLlnlc; newLink 帼壮=current; if end in3art()TODO有序链表未完结第六章递归1递归的效率问题遵歸有效铀

12、?个方法会有一定的额外幵销,控制必级从这个调用的位置转移到这个方注的开始处”除 此之外,檢给这个方法的参裁以及这个方迭返回的地扭都要被1E入魏一个内部的栈里,为的是这个 方箍可臥访问参数值和知道返回列哪里。就uiangleO这个方擅来讲因为有上述畀钳而造阪的箱野可能whi怙循环方法执行的速度比 遊归的方法快-在此懸中,逋归的代价也许不算从但是如果由于递归方法的存在,适成了丸大 觀模的方法调用的话可能会考虑消除湧归,在谊一章的最后将会详遴一些这方面的问题.另外一个低散性反映在系统内存空间存储所有的中间多数以及返回值,如尿有丈处的数据需蓼递归195存储*这就会引起栈濫已的问題.人们営常采用翅归是因

13、为它从罐念上简化了问题,而不是倒为它本质上更有锻率.2变位数3递归的二分查找1 owe r Bou nrt*a upperBund*15inwrBCLr.dJuppertAund *S ijipppr-fluHtJ?10#erB0Lind-? upperaoundb?-吕UBA3 UICT-! i呻 UWTgLUA!rtlU0:FIn EOWL*Fourid it fit 2Return 2Wei urn ?Retjrn 2Return 2Return 2増$9迷归ft MnaryScfiFchO方扭4分治算法幷治算谨递归的一分査找祛足分治算法的-,个制子,出一个人间題分成两个相对来说更小的问

14、厦,并乩 分别継决毎一牛小可卷。对每-F小问題的解决方注星一样的:把毎个小问題分礎两个更小的制題, 并11網决它Wh这个过程一直持续卜-左直到达到易于求解的堀塩情机就不用再缔续苏了,尽背正如祖鄴2章中肴蓟的一一廿僧找帘怯一忏也可以便阳非邊归的算扶恫足分洽童壮通常 翌回到述归.唸治算港常塔艮-伞方法*在堪个方法屮含有两个对自身的通归阖用.分別对应十问題的两牛 劇分.在-分杏找*,就有两个这胖的调用.但异只有一个克的执行了.(调用哪个取决于关谨 字的值J在氓一罩中*号面将金迪到珀井排序.它是点止执行了两个递归调用(炖分成两半的数 组分別进行J0序/5汉诺塔问题static int nVisks ?

15、;public static void main (Str ing arfjs) ci c Toners (jiBjsJts,直.”|:|”|匚j;public static void dcTouers(int tcpNf char frow rhr incer, char to) if(topN -1)S751亡hi. out. printJ.T1 (Di曰c 1 from rF 十 from + to + to);else 7/tOpN-lAi底座向中介底座移动r以目标底座肯中介doTowers (topN-1,from, to, inter):System- out printJ.n(D

16、imk ,r + topN + from + f com + to + to);/capN-ll中介底座为源座,移动至目标底座d.oTawers (topN-1, inter t f rom, to);6归并排序ff - zf r r. rr T! j .hpe*f =rr.-.得多.至少在璃度上是这样的*冒泡样序*端入排序和选择排序霎用5V)IT可.而归并排痒只蔓O(N*bgNh图29(第2率中)中的图惡表明了归并捧序要比衙蛍排序快参少,如壊N 被排甲忖private void recMergtSortflongfl workspace int lowerBoufid, int upperB

17、ound) iftlowerBound upperBound)/ if range is 1)return; no use sortingelseif find midpointint nio = lowerBound+upperBoundJ f 2;/ sort low half recMrSortworkspace, lcwerBoundt mid);/ sort high Half recMergeSort(workspace, mid+1)叩perBound); merfie then eroe(workspace, lowetBound, mid+1, upperBound);pri

18、vate void wrge(lanfl workspace, int LowPtr r int JiiflhPtr, int upperBourdiot j - 8;/f workspace indexint lowerBound lowPtr;int nid hlflhPtrl;int n - upperBoundlowerBound- 1;/f I of itemswhile(lowPtr mid M hijtiPtr - upperBound) if( tfieArraylowPtr theArrayhlghPtr) workSp&C9t+I = theArraylowPtr+j; e

19、lseworkspace!j+ theArrayhighPtr+);#hile(lowPtr - aid) workspace!j+) theArraylowPtr+;wftiL(hi(hFtr = upperBound)workspacejt*j theArray(hlghPtr*l for(pe; jn; j+j theArray(lnierBoun(H| werkspecefj; / mu! wrgef) 归并排序需要O(N如gN)时间o 归并排序需要一个大小等于原来数俎的工作空间7递归和栈它们是联在所有方法内部的下画粗略地说一下谒用一个方注时胃笈生的皐惰 为一个方法械谯用时+它的参数以

20、投返回也址穢压入一牛栈中. 这个方注可以逸过悲耽栈顶元案的(6来访问它的参数 当这个方法要返回的时恨它書看栈以获得返冋地址然启这个地址以及方袪的折有馥数 退栈.井R销毁 枉何可以用递归完咸的操作都可以用一个栈来实现p 递归的方绘可匪效率低。如果是这祥的话,有时可規压一个简单循环或者是一个基于栈的 方法来替代它。/TODOstackTria ngle.java8乘方、背包、组队、第七章高级排序1. 希尔排序2. 划分算法int leftPtr * left 1;int rightPtr - right + 1; whiLe(true)while(LeftPtr right &AthftArray

21、(+lBftPtri / 冋P)If right of first lem打 left of pivot find bigger item pivot)/ if pointers cross, ”partition done/ nol crossed? so/swap eLen)ent5/ raturn partitionwhilerightPtr 、 left & theArrayl- rightPtr i H inop)if(leftPtr = riflhtPtr break;elsempfleftPtr,rightPtr); / end while (true | rfltirn lef

22、tPtr; / md partitLonltO尖际上、hftPlr切姑化时是在勇一个数据项的用边一世.rightPtr是在蜒后一个数堀项的右辻一 仏这是園为在它们工作之前,它怕都要分别的加一和减一。停止和丈扶当锻PH-遇到比枢址小的数据项时,它继埃右移,囲为这个数据瑕的&畫巳经处在数组的止确 一址了.但是当遇到比枢纽大的数据项时”它就停下来,类锂的,当rishiPtr遇到大于枢刼的数 据项时.它解续左移,胆是当发现比枢纽出的她据项时,它也碎下来,两个内层的吋hi怙循坏第 一个应用于leftPtr,第个应用于righiPtr,控制这个押描过程。闵为指针退出了押hilu精环,所以 它庐止移动。下面

23、是一段扫描不在适当位置上的数裾项的储化代码,Mlil旺 thArray+leftPtrl pivot ) H find uuLlr itcn;H nopswap皿代Ptr, rightPtr);if 理即 elints篇一个while蹒坏在发堀比理纽大的敕据塡时退出:第二牛循环在发现比握纽小的数摇顼时退 出半这两个憎坏都退出之厉kfcPtr lightPiT都措着在数组的错澡一方位覺上的数霁项,所以交 换这两养数需项.3快速排序4小结 J H希尔拧序将嗜量应用到播入持序.然后逐渐堀小缗量* n增用推序表示毎隔n牛元靈进行排序。-被根为闻您序列或者间距库列的数列决定了希缶粹FP的楼序间隔* 常用

24、的间隔序列是由递归表达Sh=3*h+1生成的,h的为L* 一个容第了巾00个数据顶的戳蛆.期它送打希尔卅序可以是闻踊序364, 121. 40, 13- 4.燉后是1的增量家序.* 希尔年序很难分折,但是它运行的时间复杂度大釣为(XN*(lagN)bn这比时间复杂度为 O(N勺的持序笫袪要快剿如址捋人幷序快.但足比砖间复杂度为O(N*kgN)的算法慢, 侧如出快速排序幔.划分数组就是耙数給仿対两个了数组.在组中所有的救掘项关键宇的值都小于犀定的 值,而在另一蚪中所育敬盛顼关铤宇的值则丸于或等于皓定值* 枢纪是在划分內过程中确定數据项应该放在哪一里的值小于枢纽的載嘉项都放在用边一 组:而人于釈齟

25、的奴据碘都放在右边一如.* 在划分舞法中.在各自的while循环屮的两个敷纽下标的楷针,分别从教组的两端幵始. 相向游动.竟找闊要交快的数据顼* 当一个数坦下标指针找到一个需要交换的蠡据项时*它的while中IT. 当两个环都终止时,交扶这两个刼据項, 当两个while循环都终止时.井且两个子数组的下标指针相遇或考交帶.则划分过程紿克匸 划分操作有线件的时何复杂SXN,做N+1或N+2次的忧较以及歩十M2次的变换, 划分算法的内部while ffi环需要额外的检测,以防止蠶组下标越界。 轶谨排序划井一个散粗、然后谨归调用自身,对划分得到的两个ra进行快速排序 只含有一牛数牖项的子冢組定为八经有

26、序.这一点可以柞为快速排序算准的臺值(终止 条件, 快逋排序算注划分时的枢纽杲个特定数据顼关犍字的值这个数据顶隸为血曲枢纽h 在快速挂序的简単版本中总是由子歎组的最右端的数据项作为板纽.划分的过程中柩纽总是放在被划分子数组的右界,它不包含在划分过規巾划分乏后枢纽也换位,枝放在两个划井子sazrco这就是枢纽的最终排序位置 快達捋序抽简萌版木+对已经有序(或者逆序的数据项排序的执打撤率只有O少汎 更高级的快遠排序版本中,枢纽是子数组中第一个、晟后一牛以&中伺一个数据项的中值+ 塔林为“三数据顼取中(medim of-lhree)划分卩三蟄据项取中划分有效地馨决了对巴有序数据项排序时执行竝瘵仅是0

27、(疋)的问题。在三数据项取中划分中、在对左端、中间以及右端的敷据项取中值的同时对它们进行排序 这个排序算法消除了划裁算扶内部卿同匕循环中对数据越界的检测.快速排序毎法的时恂复杂度为(XN*kg2N)C除丁用简单的快堪摊库版本狡已有序数据项排序的情子频粗小于一宦的容輦切割界限*汕如 时用另一种方袪来排序,而不用快速排库n 通常用插入排样对小于切割界限的于数组拮序口在快速拌序已绘对大于切劃界限的子ffiO完序之后,插入排序也町用于整个的嫩 基数排序的时间it黑度和快速排相同*只是它需要两缶的存储空间,第八章二叉树i通常结合了两种数据结构的优点:一种是有序数组,另一种是链表。在有序数组中查找快,插入

28、慢,在链表中查找慢2二叉搜索树3. 遍历树(前序、中序、后序)中序遍历中序遍历二叉搜索树会使所有的节点按关键字值升序被访何到。如果希望在二叉树中创建有序 的数据序列,这是一种方法。珂历树的最筒单方法是用递归的方法(第6章中介绍过:)。用逋口的方浓遍历整課掷要用一个 节点作为参数。如始化时这个节点是银。这个方法只需要做三件事:1. 调用自身来遍历节点的左子树。2. 访闫这个节点。3. 谓用自身来遍历节点的右子树。记住访问一个节点意味看对这个节点做某种操作;显禾节点,把节点写入文件,或其她别的操 作。遶历可以应用于任何二叉槿,而不只是二叉搜索树。这个遍场的億理不关心节点的关键孑值; 它只是看这个节

29、点是否有子节点。private void inOrd&r(node LocalRootifflocalRoot 匸 null)inOrjer(localhoot. leftchild);System, out. print (localRoot. iData + ); inOnier(localfloot rightchild);幵始时用根作为参数调用这个方法: inorder(root);首先,把根A作为参数采调用inOrderO方袪。这个调用的具体表示是inOrdertA). inOrdeT(A) 首先托自己的左了节点B作为参数调用inOrderO方法,这第二芳调用用in6der(B)表不

30、,inOrder(B)同样先把口己的左子节点作为参数谒用inOrdcr()方法但是,B没有左子咅点,所以参 数就是null。这个调用可以写为inOrder(niilL)现在,inOnkr()方法存在看三个实J;inOfder(A)JnOrdcr(B) inOrdertnull)6但足,inOrder(nuH)发规参数足null时会立即返回.(肯定都会出现这种情况)现在,inOrder(B)继续访旬节点B;假设这里就是把B节点显示出来。接着inOrdertB)乂调用 inOrderf),把它的右子节点作为参数,这次参数还是mill,所以第二次inOrder(null)还是审即返冋了。 现在inO

31、nier(B)d经执行了步骤I、步骤2和步募3,所以它可以返冋了(井且不再存在了人然后叵到in6der(A).从遍历A的左子节点处返回.访问Ae然后再次调用inOrder().把C作 为參数,创建inOrdcr(C).像inOrdcrfB)样,inOnier(C)没有子节点,所以步驟1什么也不做就返 回了.步骤2访问G步璇3同样什么也不做就返何,现在,inOrdcr(C)返冋到inOrdcr(A).现在inOrder(A)己经龙成了,所以它区回,整个垠历就结束了。访问节戊的顺序息B, A. C; 它们是被中序访问的。可以用同样的方法来处理更复杂的树.每个节点处inOrderi)方法都调用自己,

32、直到充成整棵树 的遍历。屮前岳:A*(B+C):*A*9C;A8C图8,11表刁A个算术表达式的树 下面是前序遍历pre5d苛()的三个步骤t访问节点口2. 调用自身遍历该节点的左子树。 工调用自身遍历该节点的右子树。ut第二种遍历方法,后序遍历把那三个步骤又换了顺序:1. 调用自身遍历节点的左子树亡2. 调用自身遍历节点的右子树3. 访问该节点、节点的删除(二叉搜索树),删除节点包含左右子节点25的焙缆和蝌陰前b)删除后图&16被后继替换的节点君绽节点是deiNode t子节点的左侖代如果successor是要跚除节直右子节点的左后代,执行删除操作需要以下四个步骤:1, 把后继父节点的Icf

33、lChild字段置为successor的右子节点2+把successor的rightChlld字段置为要删除节点的右子节点。3. current从它父节 nghiChdd字段移除把这个字段置为succes&or.4- IE curreni的左子节点从current移除.succea&or的leftChild字段置为current的左子节点占itn步a)剧除前b)删除后图8.20后继节点是左子节点时的删除过程我后继节点怎么找节点的后继呢?对人来说,可以很快地找到节点的后继(不过也限于简单的枕).只娶 很快旬豹 眼树,就可以找到比要删除节点大的下一个节点了。右图8.16 t就可以根快看出25的 后

34、缱是30。没有其祂的节点比25大,而比30小了。但是计篡机不能“扫一眼”就我到节点的后 继;它需耍有算法.下而就是算法:首先,程序找到初始节点的右子节点.它的关钳字值定比初始节点丿“然后转到初始节点的 右子节点的左了节仓那里(如果有的话).然后到这个左于节点的左子节点,以此类推,就看左子 15点的路径一包向下找.这个路栓上的最后一牛左予节点就是初始节点的后继,如图8.17所示,为耐么可以用这个算法呢?这里实郞上是耍找比初始节点关键值大的节点集合中最小的一个 点.为找到初始节点的右了节点时,这个以右子节点为根的了列的所有节点都比初始节点的吹製 字備人,丙为这是二叉搜索树所定义的。现在耍找到这棵f

35、树中值艮小的节点。本书己经讲过,找 了用的最小值应该俶看所有方子节点的胳程找下氏因此这个篡法可以我到比初始节,点大的址小 的节总:它就是要找的后继。如杲初始节点的右子节点没有左子节点,那么这个右子节点本身就是后继。如图8.18所示S8.I7找后继节点團8.1R右子节点是后继节点如吴successor是要删除卞点右了节点的左后代,执行删除操作需要以下四个步骤;1. 把后继父节点的leftChild字段置为successor的右子节点。2. 把successor的rightChild字段置为要删除节点的右子节点。3. 吧currem从它父节点的rightChild字没移除,把这个字段琵为succe

36、ssor4. 耙current的左了节点从curreni移除,successor的leftChild字段置为current的左子节点。叮制除前b)删除后图20后继节点是左子节点时的删除过程successorParent.leftChild succeisor.rightChild; 2- successor.riQhtthiid delMe.rightchild;3, parent.rlghtctiild = successor;4. auccssor.leftChild = current.lftChild;据项个数的以2为底的对数。这里,设表中第一列节点个数为N,弟二列层数为L,则N比2的

37、L 次方小h即:N=21等式毎边加1,盘對:N+l=2这尊于:L=log2(N+l)-因此,常见的树操作时间复杂度大致是N以2为底的对敬。在大O表示法中,表示为OflogN). 因此,树对所有常用的数据存储鶴作都有很高的缎率。洞历不如其他操作吹,但是,遍历在大科数据库中不是禽用的變作.它更常用于程序中的埔助方法来解析篦术或臭他的表达式,而且表达式一般都不会很长。3、张小娴说:当时间过去,我们忘记了我们曾经义无反顾地爱过一个人,忘记了他的温柔,忘记了他为我做的一切。我对他再没有感觉,我不再爱他了。为甚么会这样?原来我们的爱情败给了岁月。首先是爱情使你忘记时间,然后是时间使你忘记爱情。4、张小娴说

38、:思念一个人,不必天天见,不必互相拥有或相互毁灭,不是朝思暮想,而是一天总想起他几次。听不到他的声音时,会担心他。一个人在外地时,会想念和他一起的时光。5、张小娴说:爱情,原来是含笑饮毒酒。6、张小娴说:不被人珍视的爱情,就只是个羞耻的笑话。7、张小娴说:寂寞的人,感冒会拖得特别的久,因为她自己也不想痊愈。8、张小娴:女人放弃一个跟不上她的男人,是有志气。男人放弃一个跟不上他的女人,则是无义。9、张小娴说:清醒一点吧,世上没有未完的事,只有未死的心。10、张小娴说:遗憾,也是一种幸福。因为还有令你遗憾的事情11、张小娴说:失望,有时候也是一种幸福。因为有所期待,所以才会失望。因为有爱,才会有期待。所以纵使失望也是一种幸福,虽然这种幸福有点痛。12、张小娴说:突然觉得很委屈。我对你微笑,转身的刹那,终于难过成你不知道的样子。13、张小娴说:做一个诚实的孩子。喜欢一个人,不到一定程度,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论