C 資料結構精要 題目答案 詳細

2021-04-21 09:10:11 字數 3708 閱讀 6831

資料結構是電腦科學專業的核心課程之一,物件導向方法已經成為目前系統開發和程式設計的主流模式,而c++是目前使用的最廣泛的物件導向程式設計語言之一。

知識點1、順序表的概念

順序表是線性表的順序儲存結構,加按順序儲存方式構造的線性表的儲存結構。

說明:對於n個元素的順序表a,可以表示為a[1..n](適合pascal),其下標從1到n,a[1]稱為第1個元素,a[2]稱為第2個元素,……,a[n]稱為第n個元素;也可以表示為a[0...n-1](適合c/c++),其中下標0到n-1,a[0]稱為第1個元素,a[1]稱為第2個元素,……,a[n-1]稱為第n個元素。

本教程採用後者。

2、順序表的儲存結構

順序表節點型別的定義如下:

#define max 50 //順序表中最多元素個數

typedef int elemtype;//定義elemtype為int型別

typedef elemtype sqlist[max];

在順序表中,每個節點ai的儲存位址是該節點在表中的位置的i的線性函式,只要知道基位址和每個節點的大小,就可在相同的時間內求出任一節點的儲存位址。因此順序表是一種隨機儲存結構。

假設表中每個節點占用c個儲存單元,並設用中開始節點a1的儲存位址(簡稱為基礎位址)是loc(ai),那麼節點ai的儲存位址loc(ai)可通過下式計算:

loc(ai)=loc(a1)+(i-1)*c(1≤i≤n)

3、順序表的運算

●create(sqlist a):建立順序表a,並返回其中的元素個數。

●disp(sqlist a,int n):輸出乙個具有n個元素的順序表a。

●ins(sqlist a,int i,elemtype x):在順序表a的第i個元素前插入乙個元素x。若i=0,則新元素作為第1個元素;若i=n,則插入在順序表的最後。

●del(sqlist a,int n,int i):在順序表a中刪除第i個元素。

●find(sqlist a,int n,elemtype x):在乙個有n個元素的順序表a中查詢元素值為x的元素。

題目:實現兩個鍊錶的合併

(1) 建立兩個鍊錶a和b,鍊錶元素個數分別為m、n

(2) 假設元素分別為(x1,x2,……,xm),和(y1,y2,……,yn)。把它們合併成乙個線性表c,使得:

當m>=n時,c=x1,y1,x2,y2, ……,xn,yn, ……,xm

當n>=m時,c=y1,x1,y2,x2, ……,ym,xm, ……,yn

輸出線性表c

(3) 用直接插入排序法對c進行公升序排序,生成鍊錶d,並輸出鍊錶d

測試資料:

(1)a表 (30,41,15,12,56,80)

b表 (23,56,78,23,12,33,79,90,55)

(2)a表 (30,41,15,12,56,80,23,12,34)

b表 (23,56,78,23,12)

報告要求:

1、方案設計

2、程式框圖

3、程式**

4、程式除錯過程和結果

5、總結

精典例題解析

【例1】設計順序表的基本演算法。

【解】 所謂順序表,是採用一段連續的區域儲存資料的線性表。實現本題功能的sq.cpp檔案如下:

程式**

#include"iostrea.h"

#define max 50 //順序表中最多元素個數

typedef int elemtype;

typedef elemtype sqlist[max];

int create(sqlist a)//建立順序表

return n; }

void disp(sqlist a,int n)//輸出乙個順序表

return n; }

int del(sqlist a,int n,int i)//在順序表a中刪除第i個元素

for(p=r[i];p>=j+1;p--)//將第i個線性表的第j個位置起的元素後移

s[p+1]=s[p];

s[p]=x;

r[p]++; }

}(2)的演算法如下:

void del(i,j)

【例6】設a=(a1,a2,...am)和b+(b1,b2,..bn)均為順序表。若n=m且ai=bi(i=1,2,..n),則稱a=b;若ai=bi(i=1,2,...j)且a(j+1)程式**

#include"sq.cpp"

int comp(sqlist a,int na,sqlist b,int nb)

void main()

【題2】編寫乙個演算法,將乙個順序表a(有n個元素)分拆成兩個順序表,使a中大於0的元素存放在b中,小於0的元素存放在c中。

【解】本題的演算法思想是:依次遍歷a中的元素,比較當前的元素值,大於0者賦給b,小於0者賦給c。實現本題功能的程式如下:

程式**

#include"sq.cpp"

void split(sqlist a,int na,sqlist b,int *nb,sqlist c,int *nc)

void main()

【題3】已知乙個順序表a中的元素按值非遞減有序,編寫乙個函式,插入乙個元素x後保持該順序表是有序的。

【解】先找到適合當前的位置,然後後移元素空出乙個位置,再將x插入。實現本題功能的程式如下:

程式**

#include"sq.cpp"

int insert(sqlist a,int n,elemtype x)//順序表長度為n

return (n+1); //順序表長度增1 }

void main()

【題4】編寫乙個演算法,將m(m>2)個有序(從小到大)順序表合併成乙個有序順序表。合併過程中不另設新的順序表儲存。

【解】兩個順序表a和b的合併過程是,從a的最後1個元素和b的第1個元素開始分別向前向後進行比較,將較大的元素先定位在a中。實現本題功能的程式如下:

程式**

#include"sq.cpp"

int comb(sqlist a,int na,sqlist b,int nb)

void main()

【題5】設某機器表示的整數不超過5位十進位制數字。試設計一種表示任意長的整數的資料結構,並利用你設計的資料結構,寫出計算任意給定的兩個整數之和的演算法。

【解】將使用者輸入的正數按各位數字存放在乙個順序表中,這樣就變成了兩個順序表中的數字相加。實現本題功能的程式如下:

程式**

#include"sq.cpp"

int input(sqlist a)

return i; }

void output(sqlist a,int low,int high)

//輸出順序表a中的a[low]到a[high]

else

a[i]=j;

if(i==max-nc)

else

length=nc; }

}return length; }

void sqlist a,b;

int na,nb,nc;

na=input(a);

nb=input(b);

cout<<"整數a:";

output(a,0,na);

cout<<"整數b:";

output(b,0,nb);

nc=add(a,na,b,nb);

cout<<"相加:";

output(a,max-nc,max); }

大話資料結構精要提取

一 資料結構分為資料結構和物理結構 1.1邏輯結構 是指資料物件中資料元素之間的相互關係 邏輯結構包括 集合結構 線性結構 樹形結構 圖形結構 1.2物理結構 是指資料邏輯結構在計算機中的儲存形式 物理結構包括 順序儲存結構 鏈式儲存結構 1.2.1 順序儲存結構 是把資料元素存放在位址連續的儲存單...

資料結構vl怎麼求 資料結構考試題目及答案

then begin flag 1 x r j r j r j 1 r j 1 x end if flag then 演算法結束 end資料結構試題8 一.單項選擇題 每小題1 分,15 分 1.編號為a,b,c,d 的四輛列車,順序開進棧式結構的站台,則開出車站的順序中,不可能出現的次序為 a.b...

資料結構實驗題目

1 集合的交 並 差運算 容易 問題描述 編制乙個能演示執行集合的交 並和差運算的程式。集合元素用小寫英文本母。基本要求 1 用線性表來儲存集合 2 分別實現交 並和差這三個集合運算 3 輸出結果 2成績統計 中等 問題描述 給出n個學生的m門考試的成績表,每個學生的資訊由學號 姓名以及各科成績組成...