In der Informatik und Softwaretechnik ist eine Datenstruktur ein Objekt zur Speicherung und Organisation von Daten. Es handelt sich um eine Struktur, weil die Daten in einer bestimmten Art und Weise angeordnet und verknüpft werden, um den Zugriff auf sie und ihre Verwaltung effizient zu ermöglichen.

1.Stapelspeicher

Ein Stapel kann eine theoretisch beliebige, in der Praxis jedoch begrenzte Menge von Objekten aufnehmen. Elemente können nur oben auf den Stapel gelegt und auch nur von dort wieder gelesen werden. Elemente werden übereinander gestapelt und in umgekehrter Reihenfolge vom Stapel genommen. Dies wird auch Last-In-First-Out-Prinzip (LIFO) genannt.

1.1 Begriff

Bottom Of Stack(bottom):Kopf vom Stapelspeicher

Top Of Stack(top):Schwanz vom Stapelspeicher

Herunternehmen(Pop):Delete Element vom Top

Darauflegen(Push):Insert Element vom Top

Empty Stack:Wenn Stapelspeicher 0 Element enthält

1.2 Operation

Darauflegen(push) verteilt Value zu Stapelspeicher Feld,dann plus Top 1

Herunternehmen (pop) verteilt Value zu Stapelspeicher Feld,dann minus Top 1

2.Warteschlange

Man kann sich eine Warteschlange wie eine Warteschlange von Kunden an einer Kasse vorstellen. Der Letzte, der sich in die Schlange stellt, wird auch als letzter bedient. Umgekehrt wird derjenige, der sich als erstes angestellt hat, als erster bedient.

2.1 Begriff

Kopf von der Warteschlange(front):Erstes Element der Warteschlange

Schwanz von der Warteschlange(rear):Letztes Element der Warteschlange

出队(Dequeue):Delete Element von dem Kopf der Warteschlange

入队(Enqueue):Insert Element von dem Schwanz der Warteschlange

2.2 Operation

Beim Enqueue muss Element vom Rear hinzugefügt werden;Beim Dequeue lässt Element vom Front ausgehen

3.Lineare Liste

3.1 Begriff

final Squenz des 0 order mehr Data Elements

Länge der Lineare Liste:Anzahl der Element im Lineare Liste

Präkursor:Das vorne Data Elements des Data Elements

Subsequence:Das rückstandig Data Elements des Data Elements

Die zwei Arten von Speicherstruktur der Lineare Liste

Man kann Linearer Liste mit Sequence Liste order verkettete Liste verwirklichen

Sequence Liste benutzen Feld,um innere Beziehung zu erklären.

Verkette Liste benutzen Zeiger,um innere Beziehung zu erklären.

3.2 Sequence Liste

Kern Operation

3.2.1 insert Element

zuerst beurteilen Index ob er legal ist

Falls Index legal ist

versetzen rückstandig Data Elements gesteckter Data Elements nach umgekehrte Reihenfolge,weil nach der Reihenfolge werden vorne Data Elements bedeckt

Wenn Operation hat sich beendet,verteilen value

Länge++

bool List::ListInsert(int i, int *Elem)
{
if (i< || i>m_iLength)
{
return false;
}
else
{
//先在后面进行移动
for (int k = m_iLength - ; k >= i; k--)
{
m_pList[k + ] = m_pList[k];
}
//插入元素
m_pList[i] = *Elem;
m_iLength++;
return true;
}
}

3.2.2 Delete Element

Zuerst beurteilen Index ob er legal ist

Falls Index legal ist

verteilen value der Data Elements zu einem Zeiger

versetzen rückstandig Data Elements gesteckter Data Elements nach Reihenfolge

Länge--

bool List::ListDelete(int i, int *Elem)
{
if (i< || i>=m_iLength)
{
return false;
}
else
{
*Elem = m_pList[i];
//先在前面进行移动,从后面开始移动会造成值的替代
//k=i+1对应着k-1,若k=i,k <= m_iLength-1,m_pList[k] = m_pList[k+1];
for (int k = i+; k <= m_iLength; k++)
{
m_pList[k-] = m_pList[k];
} m_iLength--;
return true;
}
}

3.3 verkette Liste

Kopf Knoten:er ist nicht im Index des Felds inbegriffen,data ist NULL,next deutet nach erster Knoten

Kern Operation

3.3.1 insert Element

Zuerst beurteilen ob i legal ist

i kann nicht kleiner als 0,auch nicht größer als Länge der verkette Liste

newNode->next = currentNode->next;
currentNode->next = newNode;

bool List::ListInsert(int i, Node *pNode)
{
if (i< || i>m_iLength)
{
return false;
}
Node *currentNode = m_pList;
for (int k = ; k < i; k++)
{
currentNode = currentNode->next;
}
Node *newNode = new Node;
if (newNode == NULL) //判断申请的结点内存是否为空
{
return false;
}
else
{
newNode->data = pNode->data;
newNode->next = currentNode->next;
currentNode->next = newNode;
return true;
}
}

3.3.2 Delete Node

Zuerst beurteilen ob i legal ist

currentNodeBefore->next = currentNode->next;
pNode->data = currentNode->data;
delete currentNode;
currentNode = NULL;

bool List::ListDelete(int i, Node *pNode)
{
if (i< || i>=m_iLength)
{
return false;
}
Node *currentNode = m_pList;
Node *currentNodeBefore = NULL;
for (int k = ; k <= i; k++)
{
currentNodeBefore = currentNode;
currentNode = currentNode->next;
}
currentNodeBefore->next = currentNode->next;
pNode->data = currentNode->data;
delete currentNode;
currentNode = NULL;
m_iLength--;
return true;
}

4.Baum

4.1 Begriff

  • Child:Kindknoten
  • Parent:Parent node
  • Degree:Wie viele Nachkommen besitzt
  • Ordered tree:Baum nach bestimmte Reihenfolge
  • Unordered tree:Baum nach keine Reihenfolge
  • Binärbäume:Alle Knoten sind kleiner als 2
  • Voll Binärbäume:Alle Knoten haben linken und rechten Kindknoten,alle Kindknoten stehen in gleiche Schicht
  • Kompletter Binärbäume:Letzte Schicht des Baums hat erlaubt NULL Knoten,untererester Blattknoten stehen links

4.2 Feld Speicherung der Baum

Kern Operation:

4.2.1 add Knoten

direction = 0 repäsentiert linken Kindknoten,dierction = 1 repäsentiert rechten Kindknoten

linken Kindknoten = 2*Index+1;Rechten Kindknoten = 2*Index+2

下图可以验证

Linken Kindknoten und rechten Kindknoten können nicht kleiner als 0 order größer gleich als Länge des Felds

bool Tree::AddNode(int nodeIndex, int direction, int *pNode)
{
if (nodeIndex< || nodeIndex >= m_iSize)
{
return false;
}
if (m_pTree[nodeIndex] == )
{
return false;
}
if (direction == )
{
//nodeIndex * 2 + 1<0可以省略
if (nodeIndex * + < || nodeIndex * + >= m_iSize)
{
return false;
}
//判断是否有左子节点
if (m_pTree[nodeIndex * + ] != )
{
return false;
}
m_pTree[nodeIndex * + ] = *pNode;
}
if (direction == )
{
//nodeIndex * 2 + 2<0可以省略
if (nodeIndex * + < || nodeIndex * + >= m_iSize)
{
return false;
}
//判断是否有左子节点
if (m_pTree[nodeIndex * + ] != )
{
return false;
}
m_pTree[nodeIndex * + ] = *pNode;
}
return true;
}

4.2.2 Delete Knoten

beurteilen Index und value des Knoten ob sie legal sind

Index = 0 und Knoten = 0

bool Tree::DeleteNode(int nodeIndex, int *pNode)
{
if (nodeIndex< || nodeIndex >= m_iSize)
{
return false;
}
if (m_pTree[nodeIndex] == )
{
return false;
}
*pNode = m_pTree[nodeIndex];
m_pTree[nodeIndex] = ;
return true;
}

4.3 Verkette Speicherung des Baums

Kern Operation

Preorder Traversal:Wurzel Linke Rechte

Inorder Traversal:Linke Wurzel Rechte

Postorder Traversal:Linke Rechte Wurzel

void Node::PreorderTraversal()
{
cout << this->index<<" "<<this->data << endl;
if (this->pLChild != NULL)
{
this->pLChild->PreorderTraversal();
}
if (this->pRChild != NULL)
{
this->pRChild->PreorderTraversal();
}
} void Node::InorderTraversal()
{
if (this->pLChild != NULL)
{
this->pLChild->InorderTraversal();
}
cout << this->index << " " << this->data << endl;
if (this->pRChild != NULL)
{
this->pRChild->InorderTraversal();
}
} void Node::PostorderTraversal()
{
if (this->pLChild != NULL)
{
this->pLChild->PostorderTraversal();
}
if (this->pRChild != NULL)
{
this->pRChild->PostorderTraversal();
}
cout << this->index << " " << this->data << endl;
}

5.Graph

5.1 Begriff

Graph:Einfach gesagt,Graph ist ein Container,der mit Kanten und Knoten verbunden ist

Gerichteter Graph:Kante mit der Richtung

ungerichteter Graph:Kante ohne der Richtung

Gewicht:Verteilen ein Value zu einer Kante

Connected Graph:Setzen Graph G als ungerichteter Graph voraus,wenn jede Paar Knoten des Graphs eine Weg hat,G ist connected Graph

Spannbaum:Ein Spannbaum ist ein Teilgraph eines ungerichteten Graphen, der ein Baum ist und alle Knoten dieses Graphen enthält

Ausgangsgrad:die Zahl der Kanten,die von dem Knoten losfahren

Eingangsgrad:die Zahl der Kanten,die dem Knoten erreichen

Tiefensuche:nämlich Preorder Traversal.Im Gegensatz zur Breitensuche wird bei der Tiefensuche zunächst ein Pfad vollständig in die Tiefe beschritten, bevor abzweigende Pfade beschritten werden

Breitensuche :nämlich nach Schicht Preorder Traversal.Im Gegensatz zur Tiefensuche werden zunächst alle Knoten beschritten, die vom Ausgangsknoten direkt erreichbar sind. Erst danach werden Folgeknoten beschritten

Subgraph:Wenn Knoten und Kanten der Graph H ist subset von Graph G,als Subset der Graph G bezeichnen wir Graph H

strongly-connected graph:Setzen Graph G als gerichteter Graph voraus,wenn jede Paar Knoten des Graphs eine Weg hat,G ist connected Graph

5.2 Speicherung des Graphs

Kern Operation

5.2.1 stellen adjacent matrix fur gerichtete Graph

Zuerst beurteilen Reih und Glied ob sie legal ist

Wenn Reih kleiner als 0 order größer als Capcity,return false

Wenn Glied kleiner als 0 order größer als Capcity,return false

Graph:

Adjacent matrix:

Index = row*m_iCapacity+col

bool cMap::setValueToMatrixForDirectedGraph(int row, int col, int val)
{
if(row< || row>=m_iCapacity)
{
return false;
}
if (col < || col >= m_iCapacity)
{
return false;
}
m_pMatrix[row*m_iCapacity + col] = val;
return true;
}

5.3 Kleineste Spannbaum

5.3.1 Kruskal Algorithmus

Zuerst ordnen wir das Gewicht,dann wählen wir kleinest Kante aus,die Kreis kann nicht hervorgerufen werden.

5.3.2 Prim Algorithmus

Wir wählen beliebige Kante aus,dann wir fangen mit Startpunkt an,wählen kleineste Kante,die Kreis kann nicht hervorgerufen werden

6.Sort Algorithmus

6.1 Bubblesort

Großes Element sinkt,Kleines Element taucht auf

Komplexität:

Ungünstigster Fall:

Bester Fall:

6.2 Insertionsort

teilen eine Gruppe Daten in angeordenet Gruppe und ungeordenet Gruppe,angeordenet Gruppe steigt,ungeordenet Gruppe sinkt bis 0

Komplexität:

6.3 Quicksort

Komplexität:

O(nlog2(n))

Datenstruktur und Algorithmus的更多相关文章

  1. APS审核经验+审核资料汇总——计算机科学与技术专业上海德语审核

    1.APS是什么 德国驻华使馆文化处留德人员审核部(简称APS)成立于2001年7月,是由德国驻华使馆文化处和德意志学术交流中心(DAAD)在北京共同合作成立的服务机构. APS是中国学生前往德国留学 ...

  2. Abschlussarbeit:Konstruktion und Implementierung von Dota2 Datenbank Intelligent Verwaltungsplatfom

    1.Die Hintergrund und Bedeutung des Themas Dank nicht ausreichendes Erkenntnisse der Spielplanner un ...

  3. Wahrscheinlichkeitstheorie und mathematische Statistik

    Übliches Wort 正态分布:Die Normalverteilung 条件概率:Die Bedingte Wahrscheinlichkeit 排列:Die Permutation 组合:D ...

  4. S3C2440—11.und异常

    文章目录 1 未定义指令 2 中断向量表 3 设置一个未定义指令 4 调用C函数 5 UND异常处理程序 6 汇编源码 7 注意点 lr与pc 保存现场 中断向量表的跳转 程序执行顺序 问题 1 未定 ...

  5. Sie sind das Essen und wir sind die Jaeger!

    WCF  http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html HTTP 数据库分库分表 读写分离 负载均衡 wind ...

  6. Diskrete Mathematik

    1.Aussagenlogik 1.1 Gleichwertiges Kalkül 1.2 Normalform Einfache Disjunktion besteht aus Disjunktio ...

  7. DIY申请达姆施塔特工业大学计算机专业(Informatik)硕士(Master)【附个人简历和动机信】

    1.个人概况 双非院校本科毕业两年,已来德国一年. APS绩点2.5,均分80.17. 2020.6月考出5443德福成绩,7月中下旬递交材料,9月初获得Zulassung(录取) PS:后来考出54 ...

  8. Android Studio开发RecyclerView遇到的各种问题以及解决(一)

    以前一直在用ListView,,,最近才看RecyclerView发现好强大.RecyclerView前提是Android版本在5.0以上,本人以前用的是eclipse只支持到4.4.索性就安装一个A ...

  9. android 自定义控件——(三)水平线、虚线

    ----------------------------------View虚线或者直线(源代码下有属性解释)--------------------------------------------- ...

随机推荐

  1. 浅谈 温故知新——HTML5!

    古人有云:温故而知新.活到老,学到老,作为一枚前端的程序猿,不停的学习能够让我们对我们的技术有一个更加丰富的认识.这几天,项目已经完成,但我发现自己的知识体系存在一些短板,特别是在H5方面,所以我又回 ...

  2. 关于My Sql update语句不能用子查询的解决办法

    在使用My Sql数据库语法操作update时,第一时间想到的是一下写法: UPDATE purchase_request_detail SET convert_to_voucher_id=, con ...

  3. python网络编程--TCP连接的三次握手(三报文握手)与四次挥手

    一.TCP连接 运输连接有三个阶段: 连接建立.数据传送和连接释放. 在TCP连接建立过程中要解决以下三个问题: 1,要使每一方能够确知对方的存在. 2.要允许双方协商一些参数(如最大窗口之,是否使用 ...

  4. http与https通信

    HTTP协议 http协议与https协议的区别 GET请求和POST请求的说明与比较 发送GET和POST请求(使用NSURLSession)

  5. 多线程并行计算数据总和 —— 优化计算思想(多线程去计算)—— C语言demo

    多线程计算整型数组数据总和: #include <stdio.h> #include <stdlib.h> #include <Windows.h> #includ ...

  6. java -io字符流FileWrite操作演示

    FileWriter字符输出流演示: /* * FiileWriter 字符流的操作 * FileWriter 的构造方法 可传递 File类型 还可以传递String类型 * * 方法 : * wr ...

  7. 0基础浅谈反射型xss(2)

    0x1:回顾前文疑惑“先闭合,在构造” 上一篇,我们说到了xss的一个触发精髓,“先闭合,在构造”,对于前面的先闭合,我们来简单的解释一下:   首先说,为什么要闭合? 因为HTML标签都是成对出现的 ...

  8. [网络] DHCP 之 Mac 绑定

    [网络] DHCP 之 Mac 绑定 一.瞎扯 今天我们来简单聊聊Mac绑定,这在设备管理时常常被使用. 当然你可能会说我可以设置静态IP啊.先不提静态IP容易冲突.现在我在设置树莓派时就遇到一个问题 ...

  9. Python标准库中的生成器函数

    一.用于过滤的生成器函数 - 从输入的可迭代对象中产出元素的子集,而不修改元素本身 import itertools l1 = [1,2,3,4,5] l2 = [True,False,True,Fa ...

  10. 隔离python 运行环境和Pycharm 设置代码同步

    隔离python 运行环境 查看当前有哪些虚拟环境:workon 进入虚拟环境:workon django 退出虚拟环境:deactivate 创建虚拟环境: mkvirtualenv -p /usr ...