Ⅰ 定義單鏈表的存儲結構,然後在該存儲結構下寫一個帶頭節點的單鏈表的建立方法
intListLength_L(LinkList
&L)
{
int
i=0;//i存儲鏈表長度,初始為0
LinkList
p=L;//p為鏈表的指針,初始為頭指針,指向頭結點
if(p)
p=p-next;//如果p指向的頭結點不為空,p指向帶數據的第一個結點
while(p){//如果p非空,i長度加1,且指向下一個結點
p=p->next;
i++;
}
return
i;//返回i,即鏈表的長度
}
Ⅱ 鏈式隊列存儲結構的定義及基本操作
鏈式隊列其實很簡單的。
其實就是一個鏈表,不過這個鏈表你只能從表尾插入,從表頭刪除。(單向隊列)
鏈表你肯定會吧,定義兩個指針,分別指向表頭和表尾,作為隊頭指針和隊尾指針。封裝起來。
這就是一個鏈式隊列了。
基本操作無非是入隊,出隊,刪除這些,跟基本鏈表操作一樣的。
Ⅲ C++語言中提供有關串的類
第四章:串(包括習題與答案及要點)
本章介紹了串的邏輯結構,存儲結構及串上的基本運算,由於在高級語言中已經提供了較全善的串處理功能,因此本章的重點是掌握在串上實現的模式匹配演算法。同時這也是本章的難點。但是從全書來講,這屬於較簡單的一章內容。
--------------------------------------------------------------------------------
1.串及其運算(領會)(這些內容比較容易理解,不用死記)
串就是字元串,是一種特殊的線性表,它的每個結點僅由一個字元組成。
空串:是指長度為零的串,也就是串中不包含任何字元(結點)。
空白串:指串中包含一個或多個空格字元的串。不同與空串,它的結點就是一個空格字元。
在一個串中任意個連續字元組成的子序列稱為該串的子串,包含子串的串就稱為主串。子串在主串中的序號就是指子串在主串中首次出現的位置。如A="I love you" B="love",則B在A中的序號為3,注意空格也是字元。
空串是任意串的子串,任意串是他自身的子串?
串分為兩種:串常量和串變數。串常量在程序中不能改變,串變數則可以。
關於串的基本運算,基本上在c語言中已經學過,主要有
求串長strlen(char *s)、
串復制strcpy(char *to,char *from)、
串聯接strcat(char *to,char *from)、
串比較charcmp(char *s1,char *s2)
和字元定位strchr(char *s, char c)等
這些基本運算通過練習來掌握。
--------------------------------------------------------------------------------
2.串的存儲結構(簡單應用)
串是特殊的線性表(結點是字元),所以串的存儲結構與線性表的存儲結構類似。
串的順序存儲結構簡稱為順序串,順序串又可按存儲分配的不同分為靜態存儲分配的順序串和動態存儲分配的順序串。
靜態的意思可簡單地理解為一個確定的存儲空間,它的長度是不可變的。如直接使用定長的字元數組來定義一個串。它的優點是涉及串長的操作速度快,因為它的最大長度是不變的。
動態存儲分配就是在定義串時不分配存儲空間,直到需要使用時按所需串的長度分配存儲單元給它,並且在運行中還可以根據需要變化串的長度,這就是動態分配。不過這樣的串仍是順序存儲的,也就是說指針指向串的首地址,後面的結點是連續存儲的。
串的鏈式存儲就是用單鏈表的方式存儲串值,串的這種鏈式存儲結構簡稱為鏈串。鏈串與單鏈表的差異只是它的結點數據域為單個字元。這種存儲結構方便於串的插入和刪除操作,但是空間利用率不高,因為存放每一個字元要"搭配"一個指向下一字元的地址,而地址所佔空間是比較大的。為了解決這種"存儲密度"過低的狀況,可以讓一個結點存儲多個字元,事實上這是順序串和鏈串的綜合(折衷)。
--------------------------------------------------------------------------------
本章的重點和難點就是串運算的實現,特別是順序串上子串定位的運算。
子串定位運算又稱串的"模式匹配"或"串匹配",就是在主串中查找出子串出現的位置,這在應用中非常廣泛,比如文本編輯中的"查找和替換"用到的就是子串定位運算的演算法。
在串匹配中,將主串稱為目標(串),子串稱為模式(串),我們這樣想像,子串就如同一個模板(樣本),用它在目標上對比,從頭往後比較,凡是遇到一模一樣的那麼一段,就算找到一個位置了(我們就說,從這個位置開始的匹配成功)。用很專業的很酷的話說就是"模式在目標中出現"(我想起了警匪片里的對話),如果這個模板對應的目標串中有不一樣的字元出現,那麼這個位置就匹配失敗。
當我們用這個模子依次從目標的頭部往後移,移動到的位置就叫位移,如果每次向右移動1格,那麼每次的位移就加上1。
每次移動後要看看模板里的字元和目標中相應的字元是否相等,如果都相同,這次位移就叫有效位移(其實就是從這個位置開始的匹配成功)
另外有一個合法位移和不合法位移的概念,就是說,移動一個位置後,如果模板的最後一個字元還沒有超出目標串中最後一個字元時,這個位移就是合法位移,如果超出了,那麼就沒有比較的意義了,這時就是不合法位移。
這是比較容易理解的,串匹配問題就是找出給定模式串P在給定目標串T中首次出現的有效位移或者是全部有效位移。
具體的串匹配演算法也不是很難理解,就是用兩個循環,外循環用於進行模式的位移,內循環進行模板內每個字元的比較(判斷是否有效位移)。關於串匹配的時間復雜度,在最壞的情況下就是目標串和模式串分別是"a^n-1b"和"a^m-1b"的形式,就是說,每一次合法位移後,在內循環中都要比較m個字元才知道是不是有效位移(前面的字元都是一樣的)。所以最壞的情況下時間復雜度是O((n-m+1)m),假如m與n同階的話則它是O(n^2)。
鏈串上的子串定位運算的不同之處就是位移是結點地址而不是整數。理解一下演算法即可。
真正的應用主要還是要掌握串的基本演算法並用它們構造出可以解決具體問題的簡單演算法。
第四章 串 復習要點
本章復習要點是:
串是一種特殊的線性表,它的結點僅由一個字元組成。
空串與空白串的區別:空串是長度為零的串,空白串是指由一個或多個空格組成的串。
串運算的實現中子串定位運算又稱串的模式匹配或串匹配。
串匹配中,一般將主串稱為目標(串),子串稱為模式(串)。
本章可能出的題型多半為選擇、填空等。
Ⅳ 線性順序存儲結構和鏈式存儲結構有什麼區別
區別:
1、順序存儲需要開辟一個定長的空間,讀寫速度快,缺點不可擴充容量(如果要擴充需要開辟一個新的足夠大的空間把原來的數據重寫進去)。
2、鏈式存儲無需擔心容量問題,讀寫速度相對慢些,由於要存儲下一個數據的地址所以需要的存儲空間比順序存儲大。
Ⅳ 線性表的鏈式存儲結構定義及基本操作
是這個效果嗎
Ⅵ 線性存儲與鏈式存儲的區別
定義
順序存儲結構就是用一組地址連續的存儲單元依次存儲該線性表中的各個元素。由於表中各個元素具有相同的屬性,所以佔用的存儲空間相同。
線性表按鏈式存儲時,每個數據元素
(結點)的存儲包括數據區和指針區兩個部分。數據區存放結點本身的數據,指針區存放其後繼元素的地址只要知道該線性表的起始地址表中的各個元素就可通過其間的鏈接關系逐步找到
優缺點
順序存儲需要開辟一個定長的空間,讀寫速度快,缺點不可擴充容量(如果要擴充需要開辟一個新的足夠大的空間把原來的數據重寫進去)
鏈式存儲無需擔心容量問題,讀寫速度相對慢些,由於要存儲下一個數據的地址所以需要的存儲空間比順序存儲大。
Ⅶ C語言數據結構演算法
#include <stdio.h>
#include <stdlib.h>
struct node() //節點
{
int data;
node *next;
};
main()
{
unsigned n; //結點個數
node *head, *p, *q, *tail;
scanf("%u", &n);
head=(node *)malloc(6); //分配6b給head
p=head;
tail=head;
for(int i=1; i<=n; i++) //輸入各節點數據
{
tail=(node *)malloc(6); //分配6b給tail
p->next=tail; //接通p與tail
p=tail;
scanf("%i", &p->data); //輸入
}
p=head->next;
q=p;
for(int i=1; i<=n; i++) //輸入各節點數據
{
printf("%i , ", &p->data);//輸出
p=p->next;
free(q); //釋放
q=p;
}
}
Ⅷ 串的順序存儲結構和鏈式存儲結構該怎樣表示呀!
順序存儲結構就是 數組比如int a[5],通過下標引用;
鏈式存儲就是 鏈表
Ⅸ 單鏈表存儲結構的C語言定義是具體是指什麼
數據的存儲方式有兩種,順序存儲和鏈式存儲,當然單鏈表也是鏈式存儲中的一種,單鏈表存儲結構的c語言定義應該是用c語言去描述一個單鏈表。
Ⅹ 單鏈表存儲結構LNode, *LinkList;的含義
LNode* = LinkList, LNode,*LinkListl,都是匿名結構體別名,Lnode是實體,而LiskList是這種ElemType類型的指針,就是經常在參數表中表示一個鏈表都用LinkList定義一個指向頭結點的指針了。
單鏈表是一種鏈式存取的數據結構,用一組地址任意的存儲單元存放線性表中的數據元素。
鏈表中的數據是以結點來表示的,每個結點的構成:元素(數據元素的映象) + 指針(指示後繼元素存儲位置),元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。
以「結點的序列」表示線性表稱作線性鏈表(單鏈表)
單鏈表是鏈式存取的結構,為找第 i 個數據元素,必須先找到第 i-1 個數據元素。
因此,查找第 i 個數據元素的基本操作為:移動指針,比較 j 和 i
單鏈表
1、鏈接存儲方法
鏈接方式存儲的線性表簡稱為鏈表(Linked List)。
鏈表的具體存儲表示為:
① 用一組任意的存儲單元來存放線性表的結點(這組存儲單元既可以是連續的,也可以是不連續的)
② 鏈表中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關系,在存儲每個結點值的同時,還必須存儲指示其後繼結點的地址(或位置)信息(稱為指針(pointer)或鏈(link))