導航:首頁 > 源碼編譯 > 數據結構與演算法b

數據結構與演算法b

發布時間:2022-08-20 06:57:13

1. 數據結構與演算法

#include<stdio.h>
swap(int*a,int*b,intn,intk)
{
inttemp,j;
for(temp=0,j=0;temp<n;temp++)
if(k<n)
*b++=a[k++];
else
*b++=a[j++];
}
intsearchValue(intB[],intvalue)
{
inti=0;
while(1)
if(value==B[i++]&&i<1000)
returni;
}
intmain()
{
inta[5]={1,2,3,4,5};intb[5];
inti;
swap(a,b,5,2);
for(i=0;i<5;i++)
printf("%d",a[i]);printf(" ");
for(i=0;i<5;i++)
printf("%d",b[i]);
i=searchValue(b,4);
printf(" %d",i);
getch();
}

2. 數據結構和演算法有什麼關系數據結構就是演算法嗎

首先你要弄清楚數據結構是什麼?數據結構呢其實就是一種存儲數據之間的邏輯結構:比如我們學過的線性結構:順序表啦,鏈表啦;層次結構:樹啦。合適的數據結構可以帶來更高的運行效率和存儲效率,與相應解決實際問題演算法的適應性也就越高,這也就是為什麼一些演算法指定了數據存儲必須以某種特定的數據結才行。一般都是根據合適的數據結構來設計演算法,而不是根據演算法來設計數據結構。


演算法和數據結構往往是互不分開的。離開了演算法,數據結構就顯得毫無意義,而沒有了數據結構演算法就沒有實現的條件。良好的數據結構思想就是一種高效的演算法,但是數據結構不等於演算法。只有當數據結構用於處理某個特定問題類型的時候,數據結構才會體現為演算法。要想細致的了解,就要多看書,因為這東西畢竟發展了那麼多年,一兩句話是說不清楚的。想知道更多的數據結構與演算法知識嗎?可以去了解一下小碼哥李明傑。

3. 數據結構與演算法求助,答案是B,希望有過程,題目有圖

從答案來分析的話,數組是一組變數,可以看作一組整數,游標可以看作指針,然後開始循環,那麼隊首和隊尾指針是肯定不一樣的
僅供參考

4. 數據結構與演算法題目

#include<stdio.h>
intmain()
{inti,j,k,a[5]={5,8,9,12,16},b[9]={1,3,5,5,7,8,9,12,16},c[14];
for(i=j=k=0;i<5&&j<9;)
if(a[i]<b[j])c[k++]=a[i++];
elsec[k++]=b[j++];
for(;i<5;)c[k++]=a[i++];
for(;j<9;)c[k++]=b[j++];
for(k=0;k<14;k++)printf("%d",c[k]);
return0;
}

5. 數據結構與演算法求助,答案是B,希望有過程,因為不懂過程怎麼得來的,題目有圖

這一題可以用特例法以及排除法,A選項有可能整個隊列是空的。C選項有可能隊頭是1,隊尾是2,n>2,隊伍裡面有可能只有一個元素。D選項與C類似,也是有可能隊伍裡面只有一個元素。
B選項是對的,也就是隊尾的指針加上1,除以n取余,跟對頭相等,也就是對隊尾指針的下一個又到的隊頭,這就說明了隊伍已經滿了。

6. 數據結構與演算法選擇題

1.A
存取任一指定序號,用順序表最方便,在最後進行插入和刪除運算,順序表也可以方便的實現。
2.C
第一個是5,第二個是4,都可以,表示5、4是最後進棧的,之後再要出棧1,不可能
3.D
4.C
5.A
生成樹
6.D
二分查找的前提是該查找必須是順序存儲的有序表
7.C
8.不清楚
9.B
abc,cba正好倒過來。
10.B

7. 數據結構與演算法 線性表A、B,分別由單鏈表LA,LB存儲,其中數據元素按值升序排列

先建立一個鏈表c然後分別從鏈表a,b中彈出元素,每次取最小的加入鏈表,我的意思是如果x>y則將Y插入鏈表C直到出現Z>X才將x插入鏈表c,只需要編順次彈出元素和比較大小,加入元素這三個子程序就行了

8. 什麼是演算法與數據結構

演算法(Algorithm)是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題。
一個演算法應該具有以下五個重要的特徵:
1、有窮性: 一個演算法必須保證執行有限步之後結束;
2、確切性: 演算法的每一步驟必須有確切的定義;
3、輸入:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件;
4、輸出:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
5、可行性: 演算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。
計算機科學家尼克勞斯-沃思曾著過一本著名的書《數據結構十演算法= 程序》,可見演算法在計算機科學界與計算機應用界的地位。

數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索演算法和索引技術有關。
一般認為,一個數據結構是由數據元素依據某種邏輯聯系組織起來的。對數據元素間邏輯關系的描述稱為數據的邏輯結構;數據必須在計算機內存儲,數據的存儲結構是數據結構的實現形式,是其在計算機內的表示;此外討論一個數據結構必須同時討論在該類數據上執行的運算才有意義。
在許多類型的程序的設計中,數據結構的選擇是一個基本的設計考慮因素。許多大型系統的構造經驗表明,系統實現的困難程度和系統構造的質量都嚴重的依賴於是否選擇了最優的數據結構。許多時候,確定了數據結構後,演算法就容易得到了。有些時候事情也會反過來,我們根據特定演算法來選擇數據結構與之適應。不論哪種情況,選擇合適的數據結構都是非常重要的。
選擇了數據結構,演算法也隨之確定,是數據而不是演算法是系統構造的關鍵因素。這種洞見導致了許多種軟體設計方法和程序設計語言的出現,面向對象的程序設計語言就是其中之一。
在計算機科學中,數據結構是一門研究非數值計算的程序設計問題中計算機的操作對象(數據元素)以及它們之間的關系和運算等的學科,而且確保經過這些運算後所得到的新結構仍然是原來的結構類型。
「數據結構」作為一門獨立的課程在國外是從1968年才開始設立的。 1968年美國唐·歐·克努特教授開創了數據結構的最初體系,他所著的《計算機程序設計技巧》第一卷《基本演算法》是第一本較系統地闡述數據的邏輯結構和存儲結構及其操作的著作。「數據結構」在計算機科學中是一門綜合性的專業基礎課。數據結構是介於數學、計算機硬體和計算機軟體三者之間的一門核心課程。數據結構這一門課的內容不僅是一般程序設計(特別是非數值性程序設計)的基礎,而且是設計和實現編譯程序、操作系統、資料庫系統及其他系統程序的重要基礎。
計算機是一門研究用計算機進行信息表示和處理的科學。這裡面涉及到兩個問題:
信息的表示
信息的處理
而信息的表示和組又直接關繫到處理信息的程序的效率。隨著計算機的普及,信息量的增加,信息范圍的拓寬,使許多系統程序和應用程序的規模很大,結構又相當復雜。因此,為了編寫出一個「好」的程序,必須分析待處理的對象的特徵及各對象之間存在的關系,這就是數據結構這門課所要研究的問題。眾所周知,計算機的程序是對信息進行加工處理。在大多數情況下,這些信息並不是沒有組織,信息(數據)之間往往具有重要的結構關系,這就是數據結構的內容。數據的結構,直接影響演算法的選擇和效率。
計算機解決一個具體問題時,大致需要經過下列幾個步驟:首先要從具體問題中抽象出一個適當的數學模型,然後設計一個解此數學模型的演算法(Algorithm),最後編出程序、進行測試、調整直至得到最終解答。尋求數學模型的實質是分析問題,從中提取操作的對象,並找出這些操作對象之間含有的關系,然後用數學的語言加以描述。計算機演算法與數據的結構密切相關,演算法無不依附於具體的數據結構,數據結構直接關繫到演算法的選擇和效率。運算是由計算機來完成,這就要設計相應的插入、刪除和修改的演算法 。也就是說,數據結構還需要給出每種結構類型所定義的各種運算的演算法。
數據是對客觀事物的符號表示,在計算機科學中是指所有能輸入到計算機中並由計算機程序處理的符號的總稱。
數據元素是數據的基本單位,在計算機程序中通常作為一個整體考慮。一個數據元素由若干個數據項組成。數據項是數據的不可分割的最小單位。有兩類數據元素:一類是不可分割的原子型數據元素,如:整數"5",字元 "N" 等;另一類是由多個款項構成的數據元素,其中每個款項被稱為一個數據項。例如描述一個學生的信息的數據元素可由下列6個數據項組成。其中的出身日期又可以由三個數據項:"年"、"月"和"日"組成,則稱"出身日期"為組合項,而其它不可分割的數據項為原子項。
關鍵字指的是能識別一個或多個數據元素的數據項。若能起唯一識別作用,則稱之為 "主" 關鍵字,否則稱之為 "次" 關鍵字。
數據對象是性質相同的數據元素的集合,是數據的一個子集。數據對象可以是有限的,也可以是無限的。
數據處理是指對數據進行查找、插入、刪除、合並、排序、統計以及簡單計算等的操作過程。在早期,計算機主要用於科學和工程計算,進入八十年代以後,計算機主要用於數據處理。據有關統計資料表明,現在計算機用於數據處理的時間比例達到80%以上,隨著時間的推移和計算機應用的進一步普及,計算機用於數據處理的時間比例必將進一步增大。
數據結構是指同一數據元素類中各數據元素之間存在的關系。數據結構分別為邏輯結構、存儲結構(物理結構)和數據的運算。數據的邏輯結構是對數據之間關系的描述,有時就把邏輯結構簡稱為數據結構。邏輯結構形式地定義為(K,R)(或(D,S)),其中,K是數據元素的有限集,R是K上的關系的有限集。
數據元素相互之間的關系稱為結構。有四類基本結構:集合、線性結構、樹形結構、圖狀結構(網狀結構)。樹形結構和圖形結構全稱為非線性結構。集合結構中的數據元素除了同屬於一種類型外,別無其它關系。線性結構中元素之間存在一對一關系,樹形結構中元素之間存在一對多關系,圖形結構中元素之間存在多對多關系。在圖形結構中每個結點的前驅結點數和後續結點數可以任意多個。
數據結構在計算機中的表示(映像)稱為數據的物理(存儲)結構。它包括數據元素的表示和關系的表示。數據元素之間的關系有兩種不同的表示方法:順序映象和非順序映象,並由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常藉助於程序設計語言中的數組來實現。鏈接存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。索引存儲方法:除建立存儲結點信息外,還建立附加的索引表來標識結點的地址。散列存儲方法:就是根據結點的關鍵字直接計算出該結點的存儲地址。
數據結構中,邏輯上(邏輯結構:數據元素之間的邏輯關系)可以把數據結構分成線性結構和非線性結構。線性結構的順序存儲結構是一種隨機存取的存儲結構,線性表的鏈式存儲結構是一種順序存取的存儲結構。線性表若採用鏈式存儲表示時所有結點之間的存儲單元地址可連續可不連續。邏輯結構與數據元素本身的形式、內容、相對位置、所含結點個數都無關。
演算法的設計取決於數據(邏輯)結構,而演算法的實現依賴於採用的存儲結構。數據的運算是在數據的邏輯結構上定義的操作演算法,如檢索、插入、刪除、更新的排序等。

9. 問: [image]20 數據結構與演算法 線性表A、B,分別由單鏈表LA,LB存儲,其中數據元素按


#include<stdio.h>

#include<stdlib.h>

#include<string.h>

//類型定義

typedef char ElemType;

typedef struct Node

{ //結點類型

ElemType data; //數據域

struct Node *next; //指針域

}Node, *LinkList;


//函數聲明

LinkList *Create (LinkList *L);//生成鏈表

LinkList UnionList(LinkList LA, LinkList LB, LinkList LC);//合並兩個有序鏈表後仍有序

void ShowList(LinkList L);//輸出單鏈表

void DestroyList(LinkList *L);//清除鏈表


void main()

{

LinkList *L1,*L2,*L3;

L1=(LinkList*)malloc(sizeof(LinkList));

L2=(LinkList*)malloc(sizeof(LinkList));

L3=(LinkList*)malloc(sizeof(LinkList));

L1=Create(L1);

ShowList(*L1);

L2=Create(L2);

ShowList(*L2);

*L3=UnionList(*L1,*L2,*L3);

ShowList(*L3);

DestroyList(L1);

free(L1);

free(L2);

free(L3);

}


LinkList *Create (LinkList *L)//建立一個單鏈表,將新結點插入表尾

{

Node *r, *s;

ElemType c;

int i,n;

*L = (LinkList) malloc (sizeof(Node)); //為頭結點分配存儲空間

r = *L; //r初值指向頭結點

printf("請輸入生成鏈表的結點數:");

scanf("%d",&n);getchar();//接收回車

for (i = 1; i <= n; i ++)

{

printf("請輸入第%d個元素:",i);

c=getchar(); //獲取一個數據元素

getchar();//接收回車

s = (LinkList) malloc (sizeof(Node)); //生成一個新結點

s -> data = c; //將要插入數據元素的值賦給新結點的數據域

s -> next = NULL; //鏈表末尾結點指針域為空

r -> next = s; //將新結點插入到當前鏈表的表尾上

r = s; //r始終指向鏈表的當前表尾

}

return L;

}


LinkList UnionList(LinkList LA, LinkList LB, LinkList LC)

{

Node *pa, *pb,*pc;

pa=LA->next;

pb=LB->next;

pc=LA;LC=pc;//也可以寫成LC=pc=LA;

while((pa!=NULL)&&(pb!=NULL))

{

if(pa->data<=pb->data)

{

pc->next=pa;

pc=pa;

pa=pa->next;

}

else

{

pc->next=pb;

pc=pb;

pb=pb->next;

}

}

pc->next=pa?pa:pb;

free(LB);LB=NULL;

return LC;

}


void ShowList(LinkList L)

{

Node *p;

p=L->next;

if(p!=NULL)

do

{printf("%3c",p->data);

p=p->next;

} while(p!=NULL);

else printf("空鏈表 ");

printf(" ");

}

void DestroyList(LinkList *L)

{

Node *p;

if(*L==NULL){ free(L);return ;}

else

{

p=*L;

while(*L!=NULL)

{

p=*L;

*L=(*L)->next;

free(p);

}

}

printf("鏈表已清除! ");

}

閱讀全文

與數據結構與演算法b相關的資料

熱點內容
查看手機谷歌伺服器地址 瀏覽:191
python操作zookeeper 瀏覽:705
蘋果手機dcim文件夾顯示不出來 瀏覽:430
如何壓縮文件夾聯想電腦 瀏覽:583
程序員的學習之旅 瀏覽:440
apkdb反編譯 瀏覽:922
雪花演算法為什麼要二進制 瀏覽:825
在文檔中打開命令行工具 瀏覽:608
android圖標尺寸規范 瀏覽:369
python實用工具 瀏覽:208
流量計pdf 瀏覽:936
科東加密認證價格 瀏覽:532
dos命令讀文件 瀏覽:996
成為程序員需要什麼學歷 瀏覽:674
pdf農葯 瀏覽:228
canal加密 瀏覽:497
日本安卓系統和中國有什麼區別 瀏覽:137
linux命令行修改文件 瀏覽:838
從編譯和解釋的角度看 瀏覽:650
徐志摩pdf 瀏覽:652