数据结构与算法伪代码实现全集
算法类别时间复杂度空间复杂度特点顺序表操作O(n)O(1)随机访问高效,插入删除需移动元素单链表操作O(n)O(1)动态存储,插入删除高效二叉树遍历O(n)O(log n)递归实现简洁明了顺序查找O(n)O(1)简单但效率较低二分查找O(log n)O(1)高效但要求有序表快速排序O(n log n)O(log n)平均性能最优归并排序O(n log n)O(n)稳定但需要额外空间。
·
以下是根据您的要求整理的完整数据结构与算法伪代码实现,涵盖了顺序表、链表、树、查找和排序等核心内容:
数据结构与算法伪代码实现全集
1. 顺序表基本操作
1.1 顺序表打印
PROCEDURE PrintList(SeqList L, int n)
FOR i ← 0 TO L.length-1 DO
PRINT L.data[i] + " "
END FOR
PRINT newline
END PROCEDURE
1.2 顺序表查找
FUNCTION LocateList(SeqList L, DataType x) RETURNS int
i ← 0
WHILE i < L.length AND L.data[i] ≠ x DO
i ← i + 1
END WHILE
IF i < L.length THEN
RETURN i + 1
ELSE
RETURN 0
END IF
END FUNCTION
1.3 顺序表插入
PROCEDURE InsertList(SeqList *L, DataType x, int i)
IF i < 1 OR i > L->length + 1 THEN
PRINT "插入位置非法"
EXIT
END IF
IF L->length ≥ ListSize THEN
PRINT "表空间溢出"
EXIT
END IF
FOR j ← L->length-1 DOWNTO i-1 DO
L->data[j+1] ← L->data[j]
END FOR
L->data[i-1] ← x
L->length ← L->length + 1
END PROCEDURE
1.4 顺序表删除
PROCEDURE DeleteList(SeqList *L, int i)
IF i < 1 OR i > L->length THEN
PRINT "删除位置非法"
EXIT
END IF
FOR j ← i TO L->length-1 DO
L->data[j-1] ← L->data[j]
END FOR
L->length ← L->length - 1
END PROCEDURE
1.5 顺序表逆置
PROCEDURE inverse_seqlist(SeqList *A)
FOR i ← 0 TO floor(A->length/2) - 1 DO
t ← A->data[i]
A->data[i] ← A->data[A->length-1-i]
A->data[A->length-1-i] ← t
END FOR
END PROCEDURE
1.6 有序顺序表插入(两种方法)
方法一:从后向前扫描
PROCEDURE insert(SeqList *L, DataType x)
IF L->length ≥ ListSize THEN
PRINT "溢出错误"
EXIT
END IF
i ← L->length - 1
WHILE i ≥ 0 AND x < L->data[i] DO
L->data[i+1] ← L->data[i]
i ← i - 1
END WHILE
L->data[i+1] ← x
L->length ← L->length + 1
END PROCEDURE
方法二:从前向后扫描
PROCEDURE insert(SeqList *L, DataType x)
IF L->length ≥ ListSize THEN
PRINT "溢出错误"
EXIT
END IF
IF x ≥ L->data[L->length-1] THEN
L->data[L->length] ← x
ELSE
i ← 0
WHILE x ≥ L->data[i] DO
i ← i + 1
END WHILE
FOR j ← L->length-1 DOWNTO i DO
L->data[j+1] ← L->data[j]
END FOR
L->data[i] ← x
END IF
L->length ← L->length + 1
END PROCEDURE
2. 单链表基本操作
2.1 单链表建立(头插法)
FUNCTION CreateListF() RETURNS LinkList
head ← NULL
ch ← getchar()
WHILE ch ≠ newline DO
s ← malloc(sizeof(ListNode))
s->data ← ch
s->next ← head
head ← s
ch ← getchar()
END WHILE
RETURN head
END FUNCTION
2.2 单链表建立(尾插法)
FUNCTION CreateListR() RETURNS LinkList
head ← NULL
r ← NULL
ch ← getchar()
WHILE ch ≠ newline DO
s ← malloc(sizeof(ListNode))
s->data ← ch
IF head = NULL THEN
head ← s
ELSE
r->next ← s
END IF
r ← s
ch ← getchar()
END WHILE
IF r ≠ NULL THEN
r->next ← NULL
END IF
RETURN head
END FUNCTION
2.3 单链表打印
PROCEDURE PrintList(LinkList head)
p ← head
WHILE p ≠ NULL DO
PRINT p->data
p ← p->next
END WHILE
PRINT newline
END PROCEDURE
2.4 单链表查找
FUNCTION GetNode(LinkList head, int i) RETURNS LinkList
p ← head
j ← 0
WHILE p->next ≠ NULL AND j < i DO
p ← p->next
j ← j + 1
END WHILE
IF i = j THEN
RETURN p
ELSE
RETURN NULL
END IF
END FUNCTION
2.5 单链表插入
PROCEDURE InsertList(LinkList head, DataType x, int i)
p ← GetNode(head, i-1)
IF p = NULL THEN
PRINT "插入位置非法"
EXIT
END IF
s ← malloc(sizeof(ListNode))
s->data ← x
s->next ← p->next
p->next ← s
END PROCEDURE
2.6 单链表删除
PROCEDURE DeleteList(LinkList head, int i)
p ← GetNode(head, i-1)
IF p = NULL OR p->next = NULL THEN
PRINT "删除位置非法"
EXIT
END IF
r ← p->next
p->next ← r->next
free(r)
END PROCEDURE
2.7 单链表逆置
PROCEDURE InverseList(LinkList *head)
h ← (*head)->next
p ← h->next
h->next ← NULL
WHILE p ≠ NULL DO
t ← p->next
p->next ← h
h ← p
p ← t
END WHILE
(*head)->next ← h
END PROCEDURE
2.8 单链表长度计算
FUNCTION ListLength(LinkList L) RETURNS int
i ← 0
p ← L->next
WHILE p ≠ NULL DO
i ← i + 1
p ← p->next
END WHILE
RETURN i
END FUNCTION
3. 双链表基本操作
3.1 双链表建立
FUNCTION DCreateList() RETURNS DLinkList
head ← malloc(sizeof(DListNode))
head->next ← NULL
head->prior ← NULL
r ← head
ch ← getchar()
WHILE ch ≠ newline DO
s ← malloc(sizeof(DListNode))
s->data ← ch
r->next ← s
s->prior ← r
r ← s
ch ← getchar()
END WHILE
r->next ← head
head->prior ← r
RETURN head
END FUNCTION
3.2 双链表插入
PROCEDURE DInsertBefore(DLinkList p, DataType x)
s ← malloc(sizeof(DListNode))
s->data ← x
s->prior ← p->prior
s->next ← p
p->prior->next ← s
p->prior ← s
END PROCEDURE
3.3 双链表删除
PROCEDURE DDeleteNode(DLinkList p)
p->prior->next ← p->next
p->next->prior ← p->prior
free(p)
END PROCEDURE
4. 二叉树基本操作
4.1 二叉树构造(先序遍历)
PROCEDURE CreateBinTree(BinTree *T)
ch ← getchar()
IF ch = ' ' THEN
*T ← NULL
ELSE
*T ← malloc(sizeof(BinTNode))
(*T)->data ← ch
CreateBinTree(&(*T)->lchild)
CreateBinTree(&(*T)->rchild)
END IF
END PROCEDURE
4.2 二叉树遍历
PROCEDURE Preorder(BinTree T)
IF T ≠ NULL THEN
PRINT T->data
Preorder(T->lchild)
Preorder(T->rchild)
END IF
END PROCEDURE
PROCEDURE Inorder(BinTree T)
IF T ≠ NULL THEN
Inorder(T->lchild)
PRINT T->data
Inorder(T->rchild)
END IF
END PROCEDURE
PROCEDURE Postorder(BinTree T)
IF T ≠ NULL THEN
Postorder(T->lchild)
Postorder(T->rchild)
PRINT T->data
END IF
END PROCEDURE
4.3 二叉树节点统计
FUNCTION nodes(BinTree T) RETURNS int
IF T = NULL THEN
RETURN 0
ELSE IF T->lchild = NULL AND T->rchild = NULL THEN
RETURN 1
ELSE
num1 ← nodes(T->lchild)
num2 ← nodes(T->rchild)
RETURN num1 + num2 + 1
END IF
END FUNCTION
5. 查找算法
5.1 顺序查找
FUNCTION SeqSearch(SeqList R, KeyType K) RETURNS int
R[0].key ← K
i ← n
WHILE R[i].key ≠ K DO
i ← i - 1
END WHILE
RETURN i
END FUNCTION
5.2 二分查找
FUNCTION BinSearch(SeqList R, KeyType k) RETURNS int
low ← 1
high ← n
WHILE low ≤ high DO
mid ← (low + high) / 2
IF R[mid].key = k THEN
RETURN mid
ELSE IF R[mid].key > k THEN
high ← mid - 1
ELSE
low ← mid + 1
END IF
END WHILE
RETURN 0
END FUNCTION
6. 排序算法
6.1 直接插入排序
PROCEDURE InsertSort(SeqList R)
FOR i ← 2 TO n DO
IF R[i].key < R[i-1].key THEN
R[0] ← R[i]
j ← i - 1
WHILE R[0].key < R[j].key DO
R[j+1] ← R[j]
j ← j - 1
END WHILE
R[j+1] ← R[0]
END IF
END FOR
END PROCEDURE
6.2 快速排序
PROCEDURE QuickSort(SeqList R, int low, int high)
IF low < high THEN
pivotpos ← Partition(R, low, high)
QuickSort(R, low, pivotpos-1)
QuickSort(R, pivotpos+1, high)
END IF
END PROCEDURE
FUNCTION Partition(SeqList R, int i, int j) RETURNS int
pivot ← R[i]
WHILE i < j DO
WHILE i < j AND R[j].key ≥ pivot.key DO
j ← j - 1
END WHILE
IF i < j THEN
R[i] ← R[j]
i ← i + 1
END IF
WHILE i < j AND R[i].key ≤ pivot.key DO
i ← i + 1
END WHILE
IF i < j THEN
R[j] ← R[i]
j ← j - 1
END IF
END WHILE
R[i] ← pivot
RETURN i
END FUNCTION
6.3 归并排序
PROCEDURE MergeSort(SeqList R)
length ← 1
WHILE length < n DO
MergePass(R, length)
length ← length * 2
END WHILE
END PROCEDURE
7. 递归算法
7.1 阶乘计算
FUNCTION f(int n) RETURNS int
IF n = 0 THEN
RETURN 1
ELSE
RETURN n * f(n-1)
END IF
END FUNCTION
7.2 Ackerman函数
FUNCTION AKM(int m, int n) RETURNS int
IF m = 0 THEN
RETURN n + 1
ELSE IF n = 0 THEN
RETURN AKM(m-1, 1)
ELSE
RETURN AKM(m-1, AKM(m, n-1))
END IF
END FUNCTION
算法特性总结
| 算法类别 | 时间复杂度 | 空间复杂度 | 特点 |
|---|---|---|---|
| 顺序表操作 | O(n) | O(1) | 随机访问高效,插入删除需移动元素 |
| 单链表操作 | O(n) | O(1) | 动态存储,插入删除高效 |
| 二叉树遍历 | O(n) | O(log n) | 递归实现简洁明了 |
| 顺序查找 | O(n) | O(1) | 简单但效率较低 |
| 二分查找 | O(log n) | O(1) | 高效但要求有序表 |
| 快速排序 | O(n log n) | O(log n) | 平均性能最优 |
| 归并排序 | O(n log n) | O(n) | 稳定但需要额外空间 |
本伪代码集涵盖了数据结构与算法的核心内容,每种算法都保持了原始逻辑的完整性,同时采用标准化的伪代码格式,便于理解和实现。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)