單鏈表是鏈接存儲表示
A. 如何創建單鏈表
建立單鏈表的常用方法有兩種:頭插法建表、尾插法建表
B. 單鏈表存儲結構LNode, *LinkList;的含義
LNode* = LinkList, LNode,*LinkListl,都是匿名結構體別名,Lnode是實體,而LiskList是這種ElemType類型的指針,就是經常在參數表中表示一個鏈表都用LinkList定義一個指向頭結點的指針了。
單鏈表是一種鏈式存取的數據結構,用一組地址任意的存儲單元存放線性表中的數據元素。
鏈表中的數據是以結點來表示的,每個結點的構成:元素(數據元素的映象) + 指針(指示後繼元素存儲位置),元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。
以「結點的序列」表示線性表稱作線性鏈表(單鏈表)
單鏈表是鏈式存取的結構,為找第 i 個數據元素,必須先找到第 i-1 個數據元素。
因此,查找第 i 個數據元素的基本操作為:移動指針,比較 j 和 i
單鏈表
1、鏈接存儲方法
鏈接方式存儲的線性表簡稱為鏈表(Linked List)。
鏈表的具體存儲表示為:
① 用一組任意的存儲單元來存放線性表的結點(這組存儲單元既可以是連續的,也可以是不連續的)
② 鏈表中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關系,在存儲每個結點值的同時,還必須存儲指示其後繼結點的地址(或位置)信息(稱為指針(pointer)或鏈(link))
C. 數據結構 在線等答案
1、若頻繁的進入插入和刪除,用鏈式存儲結構比較好。這樣插入和刪除時只需要修改指針就可以了,不需要移動結點的存儲地址。
2、假溢出是是隊列在一端進入插入,TOP值就會增加,在另一端刪除,當判斷TOP==MAX-1是,就會說明已經隊滿,但實際在隊列的另一端還是有存儲空間的,這就是「假溢出」。
解決方法:設置隊列為循環隊列就可以了。TOP=(TOP+1)MOD (MAX-1)。
5、線性表。
前面兩個程序就不會了。
D. 在線等 各位大神們 快來啊啊!!
4. 要連通具有n個頂點的有向圖,至少需要(A)條邊。
A.n-l B.n
C.n+l
3. 單鏈表是__線性表_______的鏈接存儲表示。
4. 從一個棧刪除元素時,首先取出_棧頂元素________,然後再使__棧頂指針top_______減1。
5. 一個字元串相等的充要條件是 字元串長度 和 對應的每個字元都相等 。
問題一:這是什麼類型的排序演算法,該排序演算法穩定嗎?直接插入排序,穩定
問題二:設置r(O)的作用是什麼?若將WHILE-DO 語句中判斷條件改為x.key<=r(j).KEY,該演算法將會有什麼變化,是否還能正確工作?r(O)有崗哨作用,改為x.key<=r(j).KEY,該演算法不穩定了,能正確工作
E. 單鏈表問題用C語言編寫
用一組地址任意的存儲單元存放線性表中的數據元素。
以元素(數據元素的映象)
+ 指針(指示後繼元素存儲位置)
= 結點
(表示數據元素 或 數據元素的映象)
以「結點的序列」表示線性表
�8�7�8�7 稱作線性鏈表(單鏈表)
單鏈表是一種順序存取的結構,為找第 i 個數據元素,必須先找到第 i-1 個數據元素。
因此,查找第 i 個數據元素的基本操作為:移動指針,比較 j 和 i
單鏈表
1、鏈接存儲方法
鏈接方式存儲的線性表簡稱為鏈表(Linked List)。
鏈表的具體存儲表示為:
① 用一組任意的存儲單元來存放線性表的結點(這組存儲單元既可以是連續的,也可以是不連續的)
② 鏈表中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關系,在存儲每個結點值的同時,還必須存儲指示其後繼結點的地址(或位置)信息(稱為指針(pointer)或鏈(link))
注意:
鏈式存儲是最常用的存儲方式之一,它不僅可用來表示線性表,而且可用來表示各種非線性的數據結構。
2、鏈表的結點結構
┌──┬──┐
│data│next│
└──┴──┘
data域--存放結點值的數據域
next域--存放結點的直接後繼的地址(位置)的指針域(鏈域)
注意:
①鏈表通過每個結點的鏈域將線性表的n個結點按其邏輯順序鏈接在一起的。
②每個結點只有一個鏈域的鏈表稱為單鏈表(Single Linked List)。
【例】線性表(bat,cat,eat,fat,hat,jat,lat,mat)的單鏈表示如示意圖
3、頭指針head和終端結點指針域的表示
單鏈表中每個結點的存儲地址是存放在其前趨結點next域中,而開始結點無前趨,故應設頭指針head指向開始結點。
注意:
鏈表由頭指針唯一確定,單鏈表可以用頭指針的名字來命名。
【例】頭指針名是head的鏈表可稱為表head。
終端結點無後繼,故終端結點的指針域為空,即NULL。
4、單鏈表的一般圖示法
由於我們常常只注重結點間的邏輯順序,不關心每個結點的實際位置,可以用箭頭來表示鏈域中的指針,線性表(bat,cat,fat,hat,jat,lat,mat)的單鏈表就可以表示為下圖形式。
5、單鏈表類型描述
typedef char DataType; //假設結點的數據域類型為字元
typedef struct node{ //結點類型定義
DataType data; //結點的數據域
struct node *next;//結點的指針域
}ListNode;
typedef ListNode *LinkList;
ListNode *p;
LinkList head;
注意:
①LinkList和ListNode *是不同名字的同一個指針類型(命名的不同是為了概念上更明確)
②LinkList類型的指針變數head表示它是單鏈表的頭指針
③ListNode *類型的指針變數p表示它是指向某一結點的指針
6、指針變數和結點變數
┌────┬────────────┬─────────────┐
││指針變數│結點變數 │
├────┼────────────┼─────────────┤
│ 定義 │在變數說明部分顯式定義 │在程序執行時,通過標准 │
│ │ │函數malloc生成 │
├────┼────────────┼─────────────┤
│ 取值 │ 非空時,存放某類型結點 │實際存放結點各域內容 │
│ │的地址 │ │
├────┼────────────┼─────────────┤
│操作方式│ 通過指針變數名訪問 │ 通過指針生成、訪問和釋放 │
└────┴────────────┴─────────────┘
①生成結點變數的標准函數
p=( ListNode *)malloc(sizeof(ListNode));
//函數malloc分配一個類型為ListNode的結點變數的空間,並將其首地址放入指針變數p中
②釋放結點變數空間的標准函數
free(p);//釋放p所指的結點變數空間
③結點分量的訪問
利用結點變數的名字*p訪問結點分量
方法一:(*p).data和(*p).next
方法二:p-﹥data和p-﹥next
④指針變數p和結點變數*p的關系
指針變數p的值——結點地址
結點變數*p的值——結點內容
(*p).data的值——p指針所指結點的data域的值
(*p).next的值——*p後繼結點的地址
*((*p).next)——*p後繼結點
注意:
① 若指針變數p的值為空(NULL),則它不指向任何結點。此時,若通過*p來訪問結點就意味著訪問一個不存在的變數,從而引起程序的錯誤。
② 有關指針類型的意義和說明方式的詳細解釋
可見,在鏈表中插入結點只需要修改指針。但同時,若要在第 i 個結點之前插入元素,修改的是第 i-1 個結點的指針。
因此,在單鏈表中第 i 個結點之前進行插入的基本操作為:
找到線性表中第i-1個結點,然後修改其指向後繼的指針。
#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0#define Status inttypedef int ElemType;/*此處利用#define或typedef 將ElemType先作定義*//*此處需補充定義鏈表的結構類型聲明*/LinkList InitList(){LinkList head;</p><p>head=(LinkList)malloc(sizeof(LNode));</p><p>head->next=NULL;</p><p>return head;}void printlist(LinkList L) //這是一個輸出表元的函數{LinkList p;</p><p>p=L->next;</p><p>while(p!=NULL)</p><p>{補充一條語句;</p><p>補充一條語句;}}void CreateListF(LinkList &L , int n ) // 單號的同學用頭插法建表{ /* 補充N條語句,實現用值來建表 */ } void CreateListR(LinkList &L , int n ) // 雙號的同學用尾插法建表{ /* 補充N條語句,實現用值來建表 */ } /*補充一個演算法函數,查找表中值為X元素 */void main(){LinkList y;</p><p>int n;</p><p>printf("請輸入N的值,它代表y中元素個數:");</p><p>scanf("%d",&n);</p><p>printf("\n");</p><p>/*此處調用上面的建表函數*/</p><p>printf("\n");</p><p>printf("這是鏈表y中的元素:");</p><p>/*此處調用上面的函數輸出y表中的元素 */</p><p>printf("\n\n\n");</p><p></p><p>/*此處要補充語句,調用上面的查找表元素的函數*/</p><p></p><p>printf("\n\n\n");</p><p></p><p></p><p>}
F. C語言的單鏈表問題,謝謝解答
單鏈表簡介
鏈表中的數據是以結點來表示的,每個結點的構成:元素(數據元素的映象) + 指針(指示後繼元素存儲位置),元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。
單鏈表
以"結點的序列"表示線性表稱作線性鏈表(單鏈表)
單鏈表是鏈式存取的結構,為找第 i 個數據元素,必須先找到第 i-1 個數據元素。
因此,查找第 i 個數據元素的基本操作為:移動指針,比較 j 和 i
單鏈表
1、鏈接存儲方法
鏈接方式存儲的線性表簡稱為鏈表(Linked List)。
鏈表的具體存儲表示為:
① 用一組任意的存儲單元來存放線性表的結點(這組存儲單元既可以是連續的,也可以是不連續的)
② 鏈表中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關系,在存儲每個結點值的同時,還必須存儲指示其後繼結點的地址(或位置)信息(稱為指針(pointer)或鏈(link))
注意:
鏈式存儲是最常用的存儲方式之一,它不僅可用來表示線性表,而且可用來表示各種非線性的數據結構。
2、鏈表的結點結構
┌───┬───┐
│data │next │
└───┴───┘
data域--存放結點值的數據域
next域--存放結點的直接後繼的地址(位置)的指針域(鏈域)
注意:
①鏈表通過每個結點的鏈域將線性表的n個結點按其邏輯順序鏈接在一起的。
②每個結點只有一個鏈域的鏈表稱為單鏈表(Single Linked List)。
【例】線性表(bat,cat,eat,fat,hat,jat,lat,mat)的單鏈表示如示意圖
3、頭指針head和終端結點指針域的表示
單鏈表中每個結點的存儲地址是存放在其前趨結點next域中,而開始結點無前趨,故應設頭指針head指向開始結點。
注意:
鏈表由頭指針唯一確定,單鏈表可以用頭指針的名字來命名。
終端結點無後繼,故終端結點的指針域為空,即NULL。
4、單鏈表的一般圖示法
由於我們常常只注重結點間的邏輯順序,不關心每個結點的實際位置,可以用箭頭來表示鏈域中的指針,線性表(bat,cat,fat,hat,jat,lat,mat)的單鏈表就可以表示為下圖形式。
5、單鏈表類型描述
typedef char DataType; //假設結點的數據域類型為字元
typedef struct node{ //結點類型定義
DataType data; //結點的數據域
struct node *next;//結點的指針域
}ListNode;
typedef ListNode *LinkList;
ListNode *p;
LinkList head;
注意:
①LinkList和ListNode是不同名字的同一個指針類型(命名的不同是為了概念上更明確)
②*LinkList類型的指針變數head表示它是單鏈表的頭指針
③ListNode類型的指針變數p表示它是指向某一結點的指針
6、指針變數和結點變數
指針變數
結點變數
定義
在變數說明部分顯式定義
在程序執行時,通過標准函數malloc生成
取值
非空時,存放某類型結點
實際存放結點各域內容的地址
①生成結點變數的標准函數
p=( ListNode *)malloc(sizeof(ListNode));
//函數malloc分配一個類型為ListNode的結點變數的空間,並將其首地址放入指針變數p中
②釋放結點變數空間的標准函數
free(p);//釋放p所指的結點變數空間
③結點分量的訪問
利用結點變數的名字*p訪問結點分量
方法一:(*p).data和(*p).next
方法二:p->data和p->next
④指針變數p和結點變數*p的關系
指針變數p的值--結點地址
結點變數*p的值--結點內容
(*p).data的值--p指針所指結點的data域的值
(*p).next的值--*p後繼結點的地址
*((*p).next)--*p後繼結點
注意:
① 若指針變數p的值為空(NULL),則它不指向任何結點。此時,若通過*p來訪問結點就意味著訪問一個不存在的變數,從而引起程序的錯誤。
② 有關指針類型的意義和說明方式的詳細解釋
可見,在鏈表中插入結點只需要修改指針。但同時,若要在第 i 個結點之前插入元素,修改的是第 i-1 個結點的指針。
因此,在單鏈表中第 i 個結點之前進行插入的基本操作為:
找到線性表中第i-1個結點,然後修改其指向後繼的指針。
G. 數據結構的問題,各位幫忙解答下
ccAAAB邏輯 存儲 存儲
棧 隊列 線性鏈表
棧頂元素 表長
兩個字元串長度相等並且各個對應位置的字元都相等
H. 單鏈表是一種鏈接存儲結構,但它屬於順序存儲結構,為什麼
你把他理解成很多人在排隊買票,並且每個人都是被一根繩子連在一起的。
I. 單鏈表的單鏈表簡介
鏈表中的數據是以結點來表示的,每個結點的構成:元素(數據元素的映象) + 指針(指示後繼元素存儲位置),元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。
以「結點的序列」表示線性表稱作線性鏈表(單鏈表)
單鏈表是鏈式存取的結構,為找第 i 個數據元素,必須先找到第 i-1 個數據元素。
因此,查找第 i 個數據元素的基本操作為:移動指針,比較 j 和 i
單鏈表
1、鏈接存儲方法
鏈接方式存儲的線性表簡稱為鏈表(Linked List)。
鏈表的具體存儲表示為:
① 用一組任意的存儲單元來存放線性表的結點(這組存儲單元既可以是連續的,也可以是不連續的)
② 鏈表中結點的邏輯次序和物理次序不一定相同。為了能正確表示結點間的邏輯關系,在存儲每個結點值的同時,還必須存儲指示其後繼結點的地址(或位置)信息(稱為指針(pointer)或鏈(link))
注意:
鏈式存儲是最常用的存儲方式之一,它不僅可用來表示線性表,而且可用來表示各種非線性的數據結構。
2、鏈表的結點結構
┌───┬───┐
│data │next │
└───┴───┘
data域--存放結點值的數據域
next域--存放結點的直接後繼的地址(位置)的指針域(鏈域)
注意:
①鏈表通過每個結點的鏈域將線性表的n個結點按其邏輯順序鏈接在一起的。
②每個結點只有一個鏈域的鏈表稱為單鏈表(Single Linked List)。
【例】線性表(bat,cat,eat,fat,hat,jat,lat,mat)的單鏈表示如示意圖
3、頭指針head和終端結點指針域的表示
單鏈表中每個結點的存儲地址是存放在其前趨結點next域中,而開始結點無前趨,故應設頭指針head指向開始結點。
注意:
鏈表由頭指針唯一確定,單鏈表可以用頭指針的名字來命名。
終端結點無後繼,故終端結點的指針域為空,即NULL。
4、單鏈表的一般圖示法
由於我們常常只注重結點間的邏輯順序,不關心每個結點的實際位置,可以用箭頭來表示鏈域中的指針,線性表(bat,cat,fat,hat,jat,lat,mat)的單鏈表就可以表示為下圖形式。
5、單鏈表類型描述
typedef char DataType; //假設結點的數據域類型為字元
typedef struct node{ //結點類型定義
DataType data; //結點的數據域
struct node *next;//結點的指針域
}ListNode;
typedef ListNode *LinkList;
ListNode *p;
LinkList head;
注意:
①LinkList和ListNode是不同名字的同一個指針類型(命名的不同是為了概念上更明確)
②*LinkList類型的指針變數head表示它是單鏈表的頭指針
③ListNode類型的指針變數p表示它是指向某一結點的指針
6、指針變數和結點變數 指針變數 結點變數 定義 在變數說明部分顯式定義 在程序執行時,通過標准函數malloc生成 取值 非空時,存放某類型結點 實際存放結點各域內容的地址 操作方式 通過指針變數名訪問 通過指針生成、訪問和釋放 ①生成結點變數的標准函數
p=( ListNode *)malloc(sizeof(ListNode));
//函數malloc分配一個類型為ListNode的結點變數的空間,並將其首地址放入指針變數p中
②釋放結點變數空間的標准函數
free(p);//釋放p所指的結點變數空間
③結點分量的訪問
利用結點變數的名字*p訪問結點分量
方法一:(*p).data和(*p).next
方法二:p-﹥data和p-﹥next
④指針變數p和結點變數*p的關系
指針變數p的值——結點地址
結點變數*p的值——結點內容
(*p).data的值——p指針所指結點的data域的值
(*p).next的值——*p後繼結點的地址
*((*p).next)——*p後繼結點
注意:
① 若指針變數p的值為空(NULL),則它不指向任何結點。此時,若通過*p來訪問結點就意味著訪問一個不存在的變數,從而引起程序的錯誤。
② 有關指針類型的意義和說明方式的詳細解釋
可見,在鏈表中插入結點只需要修改指針。但同時,若要在第 i 個結點之前插入元素,修改的是第 i-1 個結點的指針。
因此,在單鏈表中第 i 個結點之前進行插入的基本操作為:
找到線性表中第i-1個結點,然後修改其指向後繼的指針。