第一篇:實(shí)驗(yàn)2,數(shù)據(jù)庫(kù)表的創(chuàng)建與維護(hù)
《數(shù)據(jù)庫(kù)原理》實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)名稱 數(shù)據(jù)庫(kù)表/視圖的創(chuàng)建與維護(hù)實(shí)驗(yàn)
班 級(jí)
2011211309
組 號(hào)
組員姓名 浦倩 楊洋
實(shí)驗(yàn)?zāi)康?/p>
1. 掌握將E-R圖轉(zhuǎn)換為數(shù)據(jù)庫(kù)邏輯模式(關(guān)系表)的方法。
2. 通過(guò)進(jìn)行數(shù)據(jù)庫(kù)表的建立操作,熟悉并掌握在Microsoft SQL Server數(shù)據(jù)庫(kù)中建立表的方法,理解關(guān)系數(shù)據(jù)庫(kù)表的結(jié)構(gòu),鞏固SQL標(biāo)準(zhǔn)中關(guān)于數(shù)據(jù)庫(kù)表的建立語(yǔ)句。
3. 通過(guò)對(duì)Microsoft SQL Server數(shù)據(jù)庫(kù)中建立、維護(hù)視圖的實(shí)驗(yàn),熟悉Microsoft SQL Server數(shù)據(jù)庫(kù)中建立和維護(hù)視圖的方法,理解和掌握視圖的概念。
4. 掌握從Excel表向Microsoft SQL Server關(guān)系數(shù)據(jù)庫(kù)導(dǎo)入數(shù)據(jù)的方法,利用實(shí)際數(shù)據(jù)建立GSM網(wǎng)絡(luò)配置數(shù)據(jù)庫(kù)。實(shí)驗(yàn)環(huán)境
采用Microsoft SQL Server數(shù)據(jù)庫(kù)管理系統(tǒng)作為實(shí)驗(yàn)平臺(tái)。實(shí)驗(yàn)內(nèi)容與步驟
1.閱讀《GSM移動(dòng)通信網(wǎng)絡(luò)配置數(shù)據(jù)庫(kù)》課程實(shí)驗(yàn)背景資料-11-v4.doc,將其中數(shù)據(jù)需求轉(zhuǎn)化為E-R圖。具體的E-R物理模型圖如下:(主鍵和外鍵關(guān)聯(lián)已在圖中顯示)
2.寫好SQL腳本文件(包括多個(gè)create table、create view等命令),一次性生成表和視圖,在Microsoft SQL Server中打開(kāi)SQL腳本文件并執(zhí)行。寫好的SQL腳本見(jiàn)附錄。
3.數(shù)據(jù)導(dǎo)入
選擇要導(dǎo)入的數(shù)據(jù)源,原始數(shù)據(jù)要進(jìn)行去空行,刪除中文行等操作。
選擇要導(dǎo)入的數(shù)據(jù)庫(kù)名。
選擇復(fù)制整個(gè)表
將數(shù)據(jù)源和數(shù)據(jù)庫(kù)中的表對(duì)應(yīng)起來(lái)。
在映射數(shù)據(jù)屬性的時(shí)候,相同的名字系統(tǒng)會(huì)自動(dòng)對(duì)應(yīng)。如果要導(dǎo)入的數(shù)據(jù)源和關(guān)系中屬性名字不相同的情況下,可以編輯映射將他們聯(lián)系起來(lái)。
成功導(dǎo)入數(shù)據(jù)。(因?yàn)閷?dǎo)入數(shù)據(jù)可能出現(xiàn)一些小問(wèn)題,所以本次實(shí)驗(yàn)的所有實(shí)體數(shù)據(jù)是分開(kāi)導(dǎo)入的。)
4.創(chuàng)建視圖(腳本見(jiàn)附錄)
A.在表“小區(qū)基本信息”上創(chuàng)建“LAC號(hào)為14121的小區(qū)基本位置信息”視圖CellInfo,屬性包括(CellID、所屬地區(qū)、LAC號(hào)、經(jīng)度、緯度)。
B.在表“20個(gè)小區(qū)一周分鐘級(jí)話務(wù)數(shù)據(jù)”上創(chuàng)建“全速率話務(wù)量平均值大于23的小區(qū)話務(wù)量數(shù)據(jù)信息”視圖CellCallInfo,屬性包括(CellID、平均半速率話務(wù)量率、平均擁塞率)。
C.創(chuàng)建“MscID = 5214的MSC管轄的BTS的基本信息,及其BTS對(duì)應(yīng)的天線基本信息。
附錄:(SQL腳本)
create view CellInfo as select CellID,AreaName,LAC,Longitude,Latitude from CELL where LAC=14121 go create view CellCallInfo as(select CELLID,avg(rate)as avg_r,avg(callcongs)as avg_c from HuaWu group by HuaWu.CELLID having avg(traff)>23)Go create view ParMscInfo as select BTS.*,Antenna.* from MSC,BSC,BTS,CELL,Antenna where MSC.MscId=5214 and MSC.MscId=BSC.MscId and BSC.BscId=BTS.BscId and BTS.BtsName=CELL.BtsName and CELL.CellId=Antenna.CellId go
use [victory] Go create table MSC(MscID int not null, MscName char(256)null, MscCompany char(256)null, MscLongitude float null, MscLatitude float null, MscAltitude float null, primary key(MscID))go
/*================*/ /* Table: BSC */ /*================*/ create table BSC(BscId int not null, BscName char(256)null, BscCompany char(256)null, Latitude float null, Longitude float null, MscID int null, primary key(BscId), foreign key(MscID)references MSC)go
/*================*/ /* Table: BTS */ /*================*/ create table BTS(Btsname char(256)not null, BscId int null, Latitude float null, Longitude float null, Altitude float null, BtsCompany char(256)null, BtsPower int null, primary key(Btsname), foreign key(BscId)references BSC)go
/*================*/ /* Table: MS */ /*================*/ create table MS(IMEI char(256)not null, MSISDN char(256)null, UserName char(256)null, MSCompany char(256)null, gsmMspSense float null, gsmMsHeight float null, gsmMspFout float null, MZONE char(256)null, primary key(IMEI))go
/*================*/ /* Table: “CELL” */ /*================*/ create table “CELL”(CellID int not null, LAC int not null, BtsName char(256)null, AreaName char(256)null, Longitude float null, Latitude float null, Direction float null, Bcch int null, primary key(CellID), foreign key(BtsName)references BTS)go create table Antenna(CellID int not null, AntennaHeight float null, HalfPAngle float null, MaxAttenuation float null, Gain float null, AntTilt float null, Pt float null, MsPwt float null, primary key(CellID), foreign key(CellID)references CELL)go
/*================*/ /* Table: PinDian */ /*================*/ create table PinDian(CellID int not null, Freq char(256)not null, primary key(CellID,Freq), foreign key(CellID)references CELL)go
/*================*/ /* Table: LinQu */ /*================*/ create table LinQu(CellID int not null, AdjCellId int null, CellLac float null, AdjCellLac float null, foreign key(CellID)references CELL)go
/*================*/ /* Table: LuCe */ /*================*/ create table LuCe(KeyNum int not null, CellID int null, Latitude float null, Longitude float null, RxLev float null, primary key(KeyNum), foreign key(CellID)references CELL)go
/*================*/ /* Table: HuaWu */ /*================*/ create table HuaWu(CellID int not null, DATA datetime not null, TIME datetime not null, nTCH float null, traff float null, rate float null, thtraff float null, callnum float null, congsnum float null, callcongs float null, primary key(DATA,TIME,CellID), foreign key(CellID)references CELL)go
實(shí)驗(yàn)要求 本實(shí)驗(yàn)內(nèi)容比較繁多,要求同學(xué)一定要進(jìn)行完全的實(shí)驗(yàn),并做出詳盡的記錄。
實(shí)驗(yàn)總結(jié)
通過(guò)本次實(shí)驗(yàn),掌握了如何使用SQL語(yǔ)言創(chuàng)建新的關(guān)系,以及設(shè)置主鍵和外鍵。在創(chuàng)建外鍵的時(shí)候,要注意其引用的主鍵要在其之前創(chuàng)建,也就是說(shuō),在實(shí)驗(yàn)開(kāi)始的時(shí)候,我們沒(méi)有注意到創(chuàng)建不同的關(guān)系的順序問(wèn)題,導(dǎo)致不能夠成功執(zhí)行腳本。在導(dǎo)入數(shù)據(jù)的過(guò)程中,一周內(nèi)的話務(wù)信息不能夠成功導(dǎo)入,問(wèn)題是話務(wù)信息的主鍵DATA和TIME,僅由這兩個(gè)屬性不能夠唯一確定一次話務(wù)信息,所以我們只能刪除主鍵,將話務(wù)數(shù)據(jù)導(dǎo)入。另外的問(wèn)題是,數(shù)據(jù)源的屬性名稱可能與數(shù)據(jù)庫(kù)中的屬性名稱不同,這時(shí)導(dǎo)入數(shù)據(jù)時(shí)系統(tǒng)不能夠自動(dòng)映射出他們之間的關(guān)系,所以要在導(dǎo)入數(shù)據(jù)時(shí)手動(dòng)編輯映射。編輯腳本語(yǔ)言時(shí),要注意視圖必須在最前面??傊m然在實(shí)驗(yàn)之前已經(jīng)較熟悉SQL語(yǔ)言的相應(yīng)應(yīng)用,但是在實(shí)驗(yàn)的過(guò)程中仍然會(huì)出現(xiàn)很多問(wèn)題,這讓我們收獲了耐心嚴(yán)謹(jǐn)?shù)膶W(xué)習(xí)態(tài)度。
第二篇:數(shù)據(jù)庫(kù)及表的創(chuàng)建與修改
實(shí)驗(yàn)一
數(shù)據(jù)庫(kù)及表的創(chuàng)建與修改
一、實(shí)驗(yàn)?zāi)康?/p>
1.熟悉掌握利用SSMS中的設(shè)計(jì)工具來(lái)創(chuàng)建表。修改表結(jié)構(gòu)以及查看表屬性等操作。
2.熟悉T-SQL的數(shù)據(jù)定義語(yǔ)言,能夠熟練地使用SQL語(yǔ)句創(chuàng)建和更改基本表。
二、實(shí)驗(yàn)內(nèi)容
1.完成實(shí)驗(yàn)教材中,實(shí)驗(yàn)1.1的全部?jī)?nèi)容。熟悉SQL SERVER的工作環(huán)境。
2、依照實(shí)驗(yàn)1.2中的二維表,完成如下內(nèi)容。
1.利用SSMS中的設(shè)計(jì)工具為數(shù)據(jù)庫(kù)LibraryLib創(chuàng)建表表1-5所示的BookClass(圖書類別表)、1-6所示的Publish(出版社信息表)、表1-7所示的Book(圖書信息表)。
2.利用T-SQL創(chuàng)建新表1-
8、1-9與1-10。
3.修改表1-10 ExtraDateFee(超期罰款信息表):將FineMoney字段數(shù)據(jù)類型更改為:numeric(15,2);刪除Remarks字段;增加新字段Descript(varchar,70)。
4.利用T-SQL語(yǔ)句:刪除BookClass(圖書類別表),并重新創(chuàng)建該表。5.在SSMS中查看Book(圖書信息表)的屬性。
三、實(shí)驗(yàn)步驟
1.利用SSMS中的設(shè)計(jì)工具為數(shù)據(jù)庫(kù)LibraryLib創(chuàng)建表。
表創(chuàng)建后的截圖如下: 表1-5:
表1-6:
表1-7:
2.T-SQL語(yǔ)句創(chuàng)建表:
創(chuàng)建表1-8: CREATE TABLE [Borrow]([BorrowID] [int] NOT NULL , [UserID] [varchar](20)COLLATE Chinese_PRC_CI_AS NOT NULL , [BookID] [int] NOT NULL , [BorrowBeginDate] [datetime] NOT NULL , [BorrowEndDate] [datetime] NOT NULL , [ManagerID] [varchar](20)COLLATE Chinese_PRC_CI_AS NOT NULL , CONSTRAINT [PK_Borrow] PRIMARY KEY CLUSTERED([BorrowID])ON [PRIMARY])ON [PRIMARY]
創(chuàng)建表1-9:
CREATE TABLE [BorrowHistory]([BorrowID] [int] IDENTITY(1, 1)NOT NULL , [UserID] [varchar](20)COLLATE Chinese_PRC_CI_AS NOT NULL , [BookID] [int] NOT NULL , [BorrowBeginDate] [datetime] NOT NULL , [BorrowEndDate] [datetime] NOT NULL , [BorrowReturnDate] [datetime] NOT NULL , [ManagerID] [varchar](20)COLLATE Chinese_PRC_CI_AS NOT NULL , [ManagerReturnID] [varchar](20)COLLATE Chinese_PRC_CI_AS NOT NULL , CONSTRAINT [PK_BorrowHistory] PRIMARY KEY CLUSTERED([BorrowID])ON [PRIMARY])ON [PRIMARY] 創(chuàng)建表1-10: CREATE TABLE [ExtraDateFee]([BorrowID] [int] NOT NULL , [UserID] [varchar](20)COLLATE Chinese_PRC_CI_AS NOT NULL , [BookID] [int] NOT NULL , [BorrowBeginDate] [datetime] NOT NULL , [BorrowEndDate] [datetime] NULL , [BorrowReturnDate] [datetime] NOT NULL , [ManagerID] [varchar](20)COLLATE Chinese_PRC_CI_AS NOT NULL , [ManagerReturnID] [varchar](20)COLLATE Chinese_PRC_CI_AS NOT NULL , [FineMoney] [money] NOT NULL , [TurnIn] [bit] NOT NULL , [ManagerFineID] [varchar](20)COLLATE Chinese_PRC_CI_AS NOT NULL , [Remarks] [char](10)COLLATE Chinese_PRC_CI_AS NOT NULL , CONSTRAINT [PK_ExtraDateFee] PRIMARY KEY CLUSTERED([BorrowID])ON [PRIMARY])ON [PRIMARY]
3.修改表1-10 ExtraDateFee(超期罰款信息表):將FineMoney字段數(shù)據(jù)類型更改為:numeric(15,2);刪除Remarks字段;增加新字段Descript(varchar,70)。
修改前:
修改后:
4.利用T-SQL語(yǔ)句:刪除BookClass(圖書類別表),并重新創(chuàng)建該表。刪除BookClass: Delete book: DELETE FROM [LibraryLib1].[dbo].[BookClass]
創(chuàng)建BookClass: Create book: CREATE TABLE [BookClass]([BookClassID] [int] IDENTITY(1, 1)NOT NULL , [BookClassName] [varchar](30)COLLATE Chinese_PRC_CI_AS NOT NULL , [BookBorrowDays]
[int]
NOT
NULL
CONSTRAINT [DF_BookClass_BookBorrowDays] DEFAULT(60), [BookFee] [money] NOT NULL , CONSTRAINT [PK_BookClass] PRIMARY KEY CLUSTERED
([BookClassID])ON [PRIMARY])ON [PRIMARY]
5.在SSMS中查看Book(圖書信息表)的屬性。
四、實(shí)驗(yàn)心得
1.剛剛開(kāi)始使用SQL servers進(jìn)行數(shù)據(jù)庫(kù)的建立及其操作,對(duì)這個(gè)平臺(tái)的功能還不大熟悉。在尋找功能鍵這一步就話了很多的時(shí)間。
2.實(shí)驗(yàn)室安裝的平臺(tái)是SQL SERVERS 2005,但是實(shí)驗(yàn)書上用的平臺(tái)是SQL SERVERS 2008,兩者使用的語(yǔ)句以及兩個(gè)平臺(tái)之間的功能都有一下差異,導(dǎo)致理解上有些困難。
3.雖然理論課上已經(jīng)學(xué)了很多SQL的操作語(yǔ)句,像表的建立,表的修改插入刪除等,但是由于平時(shí)沒(méi)有及時(shí)進(jìn)行實(shí)際的上機(jī)操作,感覺(jué)對(duì)SQL的語(yǔ)句掌握得不太好,以后會(huì)多實(shí)踐改進(jìn)。
第三篇:VFP講稿(創(chuàng)建數(shù)據(jù)庫(kù)和表)
第二部分
數(shù)據(jù)庫(kù)的創(chuàng)建與單命令
創(chuàng)建數(shù)據(jù)庫(kù)和表
一、Visual FoxPro 6.0的配置
P28
二、項(xiàng)目及其管理器
P31
1.項(xiàng)目的概念
項(xiàng)目:是文件、數(shù)據(jù)、文檔和Visual FoxPro對(duì)象的集合,被保存為擴(kuò)展名為PJX的文件。
建立項(xiàng)目可以對(duì)相關(guān)的內(nèi)容(項(xiàng)目的各組成部分)進(jìn)行統(tǒng)一組織、統(tǒng)一管理。
項(xiàng)目管理器:是Visual FoxPro中處理數(shù)據(jù)和對(duì)象的主要組織工具,是Visual FoxPro的“控制中心”。
項(xiàng)目管理器為其各個(gè)組成部分提供了一個(gè)組織良好的分層結(jié)構(gòu)視圖。利用項(xiàng)目管理器,用戶可以創(chuàng)建、修改、移出或刪除文件。只要簡(jiǎn)單地單擊鼠標(biāo),就可以跟蹤表和查詢,組織表單、報(bào)表、標(biāo)簽、代碼、位圖和其它文件。
2.項(xiàng)目的創(chuàng)建
3.一個(gè)項(xiàng)目產(chǎn)生兩個(gè)文件.PJX和.PJT。4.打開(kāi)/關(guān)閉項(xiàng)目 5.選項(xiàng)卡
三、Visual FoxPro 數(shù)據(jù)庫(kù)的基本操作
P93 1.建立數(shù)據(jù)庫(kù)
(1)在項(xiàng)目管理器中建立 *(2)從“新建”對(duì)話框中建立 *(3)用命令建立
P94(4)新建立的數(shù)據(jù)庫(kù)有三個(gè)文件
三個(gè)文件的擴(kuò)展名分別是:dbc
dct
dcx ? dbc數(shù)據(jù)庫(kù)文件的擴(kuò)展名 ? dct數(shù)據(jù)庫(kù)備注文件的擴(kuò)展名 ? dcx數(shù)據(jù)庫(kù)索引文件的擴(kuò)展名 2.打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)(1)打開(kāi)數(shù)據(jù)庫(kù) 有三種打開(kāi)方法: ? 在項(xiàng)目管理器中打開(kāi) ? *從“打開(kāi)”對(duì)話框中打開(kāi) ? *用命令打開(kāi)
OPEN DATABASE命令
P95(2)關(guān)閉數(shù)據(jù)庫(kù) CLOSE DATABASE 3.數(shù)據(jù)庫(kù)設(shè)計(jì)器
有三種打開(kāi)方法: ? 在項(xiàng)目管理器中打開(kāi) ? *從“打開(kāi)”對(duì)話框中打開(kāi) ? *用命令打開(kāi)
MODIFY DATABASE命令
P98 4刪除數(shù)據(jù)庫(kù)
有兩種刪除方法: ? 在項(xiàng)目管理器中刪除 ? *用命令刪除
DELETE DATABASE命令
P99
四、數(shù)據(jù)庫(kù)表
1.建立數(shù)據(jù)庫(kù)表
P99(1)表設(shè)計(jì)器
(2)字段名:命名規(guī)則與內(nèi)存變量的命名規(guī)則相同??膳c內(nèi)存變量同名。(3)字段類型和寬度(4)建立數(shù)據(jù)庫(kù)表產(chǎn)生的文件(5)字段有效性組框(6)用命令建立表
使用命令CREATE <表名> 有打開(kāi)的數(shù)據(jù)庫(kù)時(shí),建立的是數(shù)據(jù)庫(kù)表,否則建立的是自由表。2.修改表結(jié)構(gòu)
P102(1)插入字段(2)刪除字段(3)修改字段
(4)用命令MODIFY STRUCTURE打開(kāi)表設(shè)計(jì)器進(jìn)行修改
五、自由表
如果當(dāng)前沒(méi)有打開(kāi)數(shù)據(jù)庫(kù),創(chuàng)建的表是自由表。1.創(chuàng)建自由表。
2.自由表和數(shù)據(jù)庫(kù)表的異同。
自由表和數(shù)據(jù)庫(kù)表的設(shè)計(jì)器不同。*數(shù)據(jù)庫(kù)表有很多附加信息。3.將自由表添加到數(shù)據(jù)庫(kù)。4.從數(shù)據(jù)庫(kù)中移出表。
第四篇:實(shí)驗(yàn)2:使用向?qū)?chuàng)建并管理數(shù)據(jù)庫(kù)
序號(hào):31 云南大學(xué)軟件學(xué)院 實(shí)驗(yàn)報(bào)告
課程:數(shù)據(jù)庫(kù)原理與實(shí)用技術(shù)實(shí)驗(yàn)學(xué)期: 2015-2016學(xué)年第二學(xué)期任課教師: 專業(yè):軟件工程學(xué)號(hào):20141120188姓名:王定歡成績(jī):
實(shí)驗(yàn)2 使用向?qū)?chuàng)建并管理數(shù)據(jù)庫(kù)
做刪除或修改操作時(shí),請(qǐng)注意備份數(shù)據(jù)庫(kù)
1、使用MSSM創(chuàng)建教科書中的數(shù)據(jù)庫(kù)CAP,該數(shù)據(jù)庫(kù)的主數(shù)據(jù)文件的邏輯名稱是capbin,操作系統(tǒng)文件是cap.mdf,大小是4MB,最大是30MB,以10%的速度增長(zhǎng);該數(shù)據(jù)庫(kù)的日志文件的邏輯名稱是caplog,操作系統(tǒng)文件名是cap.ldf,大小是5MB,最大是25MB,以1MB的速度增加。數(shù)據(jù)庫(kù)CAP創(chuàng)建成功的截圖為:
2.創(chuàng)建表
使用MSSM創(chuàng)建表
步驟:1)展開(kāi)CAP數(shù)據(jù)庫(kù)目錄樹(shù)
2)選擇“表”,鼠標(biāo)右鍵單擊,并選擇“新建表” 創(chuàng)建CAP數(shù)據(jù)庫(kù)中的四張表,創(chuàng)建成功的截圖為:
3、由已經(jīng)存在的數(shù)據(jù)庫(kù)生成創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象的SQL腳本
步驟:
1)鼠標(biāo)右鍵單擊已經(jīng)存在的數(shù)據(jù)庫(kù)CAP,選擇“任務(wù)”; 2)選擇“生成腳本”,選擇編寫腳本的數(shù)據(jù)庫(kù)對(duì)象為dbo.Customers 3)選擇輸出類型為“保存到新建查詢窗口” 生成腳本截圖為:
4.管理表
使用MSSM對(duì)數(shù)據(jù)表列進(jìn)行添加、修改和刪除操作 步驟:
1)選擇已經(jīng)建立好的表Customers 2)右鍵單擊,選擇“設(shè)計(jì)表”,進(jìn)入與創(chuàng)建表相同的界面 3)增加一列,字段名:age(年齡),字段類型:int,允許為空;添加成功的截圖為:
添加后再刪除,成功刪除的截圖為:
向CAP數(shù)據(jù)庫(kù)中的表Customers添加數(shù)據(jù),添加成功的截圖為:
第五篇:重慶郵電大學(xué)數(shù)據(jù)庫(kù)實(shí)驗(yàn)2
二叉樹(shù)操作 實(shí)驗(yàn)日志
指導(dǎo)教師: 黎貴友 實(shí)驗(yàn)時(shí)間: 2010 年 某 月 某 日 學(xué)院 : 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 專業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 班級(jí): 3110903 學(xué)號(hào) : 2009214458 姓名: 駱瀟龍 實(shí)驗(yàn)室: S331-b 實(shí)驗(yàn)?zāi)康模赫莆斩鏄?shù)的定義、性質(zhì)及存儲(chǔ)方式,各種遍歷算法。
實(shí)驗(yàn)要求:采用二叉樹(shù)鏈表作為存儲(chǔ)結(jié)構(gòu),完成二叉樹(shù)的建立,先序、中序和后序以及按層次遍歷的操作,求所有葉子及結(jié)點(diǎn)總數(shù)的操作。
實(shí)驗(yàn)主要步驟:
1、分析、理解程序 #include“stdio.h” #include“string.h” #include“stdlib.h” #include“ctype.h” #define Max 20
//結(jié)點(diǎn)的最大個(gè)數(shù) typedef struct node { char data;
struct node *lchild,*rchild;}BinTNode;
//自定義二叉樹(shù)的結(jié)點(diǎn)類型 typedef BinTNode *BinTree;
//定義二叉樹(shù)的指針
int NodeNum,leaf;
//NodeNum為結(jié)點(diǎn)數(shù),leaf為葉子數(shù)
//==========基于先序遍歷算法創(chuàng)建二叉樹(shù)============== //=====要求輸入先序序列,其中加入虛結(jié)點(diǎn)“#”以示空指針的位置===== BinTree CreatBinTree(void){
BinTree T;
char ch;
if((ch=getchar())=='#')return(NULL);
//讀入#,返回空指針
else {
T=(BinTNode *)malloc(sizeof(BinTNode));
//生成結(jié)點(diǎn)
T->data=ch;
T->lchild=CreatBinTree();
//構(gòu)造左子樹(shù)
T->rchild=CreatBinTree();
//構(gòu)造右子樹(shù)
{
int hl,hr,max;
if(T){
hl=TreeDepth(T->lchild);
//求左深度
hr=TreeDepth(T->rchild);
//求右深度
max=hl>hr? hl:hr;
//取左右深度的最大值
NodeNum=NodeNum+1;
//求結(jié)點(diǎn)數(shù)
if(hl==0&&hr==0)
leaf=leaf+1;//若左右深度為0,即為葉子。
return(max+1);
} else return(0);}
//====利用“先進(jìn)先出”(FIFO)隊(duì)列,按層次遍歷二叉樹(shù)========== void Levelorder(BinTree T){
int front=0,rear=1;
BinTNode *cq[Max],*p;
//定義結(jié)點(diǎn)的指針數(shù)組cq
cq[1]=T;
//根入隊(duì)
while(front!=rear)
{
front=(front+1)%NodeNum;
p=cq[front];
//出隊(duì)
printf(“%c”,p->data);
//出隊(duì),輸出結(jié)點(diǎn)的值
if(p->lchild!=NULL)
{
rear=(rear+1)%NodeNum;
cq[rear]=p->lchild;
//左子樹(shù)入隊(duì)
}
if(p->rchild!=NULL)
{
rear=(rear+1)%NodeNum;
cq[rear]=p->rchild;
//右子樹(shù)入隊(duì)
} } }
default: exit(1);
}
printf(“n”);} while(i!=0);}
2、調(diào)試程序,設(shè)計(jì)一棵二叉樹(shù),輸入完全二叉樹(shù)的先序序列,用#代表虛結(jié)點(diǎn)(空指針),如ABD###CE##F##,建立二叉樹(shù),求出先序、中序和后序以及按層次遍歷序列,求所有葉子及結(jié)點(diǎn)總數(shù).實(shí)驗(yàn)結(jié)果:
1.當(dāng)輸入測(cè)試數(shù)據(jù)(輸入完全二叉樹(shù)的先序序列,用#代表虛結(jié)點(diǎn),如ABD###CE##F##)時(shí)(如圖1-1),回車運(yùn)行時(shí),結(jié)果如圖1-2所示;
圖1-1
圖1-2
2.按層次遍歷之前,輸入數(shù)字4(如圖2-1,);回車運(yùn)行時(shí),求出測(cè)試數(shù)據(jù)的深度、結(jié)點(diǎn)數(shù)及葉子數(shù)分別為3,6,3(如圖2-2);
圖2-1
789-