
数据结构
LorraineSuen
这个作者很懒,什么都没留下…
展开
-
查找链表中倒数第 k 个位置上的结点
已知一个带有表头结点的单链表,结点结构为原创 2020-05-01 18:33:33 · 704 阅读 · 0 评论 -
单链表拆分
设 C = { a1,b1,a2,b2,…,an,bn} 为线性表,采用带头结点的单链表存放,设计一个就地算法,将其拆分为两个线性表,使得A = {a1,a2,…,an},B = {bn,…,b2,b1}。B表采用头插法建立。LinkList Solve(LinkList &A){ LinkList B = (LinkList)malloc(sizeof(LNode));...原创 2020-04-30 10:26:46 · 496 阅读 · 0 评论 -
查找链表公共结点
给定两个单链表,编写算法找出两个链表的公共结点。若两个链表有一个公共结点,则该公共结点之后的所有结点都是重合的。如果存在公共结点,那么两个链表必定有相同的尾结点。但由于两个链表的长度可能不同,假设长度之差为 n,则首先令较长的链表遍历 n 步,这样使得两个链表能够同时到达尾结点。不难想出,由此对两个链表同时向后遍历,找到的第一个相同的结点即为第一个公共结点。LinkList Search...原创 2020-04-29 22:10:30 · 592 阅读 · 1 评论 -
单链表逆置
试编写算法将带头结点的单链表就地逆置,所谓"就地"是指辅助空间复杂度为O(1)。首先令指针 p 指向单链表第一个元素所在的结点,即头结点的后继结点;然后将头结点的 next 指针置为 NULL。将后续元素使用头插法插入单链表,实现逆置。LinkList Reverse(LinkList L){ LNode *p,*r; p = L->next; L->...原创 2020-04-29 21:36:23 · 695 阅读 · 0 评论 -
单链表反向输出
设 L 为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值。递归void print(LinkList L){ if(L->next) print(L->next); if(L) print(L->data);}不断找下一个结点,然后输出,实现反向。...原创 2020-04-29 21:16:48 · 460 阅读 · 0 评论 -
递归删除单链表中值为 x 的结点
设计一个递归算法,删除不带头结点的单链表 L 中所有值为 x 的结点。void deletex(LinkList &L,ElemType x){ LNode* p; if(!L) return; if(L->data==x){ p = L; L = L->next; free(p); ...原创 2020-04-29 21:06:51 · 1548 阅读 · 2 评论 -
有序顺序表合并
将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。bool Merge(List A,List B,List &C){ if(A.Length+B.Length > C.MaxSize) return false; int i = 0,j = 0,k = 0; while(i < A.Length&&j < B...原创 2020-04-25 20:18:51 · 364 阅读 · 0 评论 -
删除所有重复元素
从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。bool deletex(List &L){ if(!L.Length) return false; int i,j; for(i = 0,j = 1;j < L.Length;j++){ if(L.data[i]!=L.data[j]) L.data[++i] = L.da...原创 2020-04-25 19:55:23 · 226 阅读 · 0 评论 -
删除顺序表中 s 与 t 之间的所有元素
从有序顺序表中删除其值在给定值 s 与 t 之间(包含 s 和 t,要求 s < t)的所有元素,如果 s 或 t 不合理或顺序表为空,则显示出错信息并退出运行。bool deletex(List &L,int s,int t){ int i,j; if(s>=t||!L.Length) return false; for(i = 0;i <...原创 2020-04-25 19:24:26 · 1353 阅读 · 3 评论 -
删除线性表中所有值为 x 的元素
对长度为 n 的顺序表 L,编写一个时间复杂度为 O(n)、空间复杂度为 O(1) 的算法,该算法删除线性表中所有值为 x 的数据元素。int deletex(List &L,int x){ int c = 0; for(int i = 0;i < L.Length;i++){ if(L.a[i]==x) c++; else L....原创 2020-04-25 18:50:50 · 520 阅读 · 0 评论 -
快速排序
int Partition(int r[],int first,int end){ int i = first,j = end; while(i < j){ while(i < j&&r[i]<=r[j]) j--; if(i < j){ int t = r[i]; ...原创 2020-04-25 18:17:30 · 128 阅读 · 0 评论 -
1331-后缀表达式的值
【题目描述】从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标志。比如,16–9*(4+3)转换成后缀表达式为:16□9□4□3□+*–,在字符数组A中的形式为:栈中的变化情况:运行结果:-47提示:输入字符串长度小于250,参与运算...原创 2019-04-12 16:30:42 · 1233 阅读 · 0 评论