数据结构题典
文章平均质量分 57
fduan
这个作者很懒,什么都没留下…
展开
-
数据结构题典001:有序线性表的归并(ANSI C)
1、有序顺序表的归并排序,假设a[0] void merge_list( int a[], int m, int b[], int n, int ** c ){ int i = 0, j = 0; int *pa = a, *pb = b, *pc = NULL, *qa = a + m - 1, *qb = b + n - 1; if( *c != NULL )原创 2011-12-24 22:14:21 · 747 阅读 · 0 评论 -
数据结构题典014:单链表的子序列检测(ANSI C)
题目:设有两个整数序列 A = a_1, a_2, ..., a_m和 B = b_1, b_2, ..., b_n已存入两个单链表,设计算法判断序列B是否为序列A的子序列。int is_subseq_llist( link_list lst_a, link_list lst_b ){ node_ptr pa = lst_a->next, pb = lst_b->next; while(原创 2011-12-29 00:13:23 · 1318 阅读 · 1 评论 -
数据结构题典017:从无序数据建立有序顺序表(ANSI C)
题目:从无序的输入数据中建立一个递增有序的顺序表。int order_insert_array( int x[], int e, int n, int m ){ int len = m, pos, i; if( m == 0 ) x[len++] = e; else { i = 0; while( i < m && x[i] < e ) ++i; pos = (原创 2011-12-29 22:59:00 · 1884 阅读 · 0 评论 -
数据结构题典018:三个有序单链表求交(ANSI C)
题目:设有三个带头结点的元素按非递减有序排列的单链表A, B, C,对A进行如下操作,使A中仅含有三个表中的交,且没有值相同的结点,并释放无用结点。限定时间复杂度为O( m + n + p ),其中m, n, p分别为三个表的长度。/* * Intersection of three ordered linked lists. * * fduan, Dec. 29, 2011.原创 2011-12-29 23:24:36 · 1005 阅读 · 0 评论 -
数据结构题典020:栈的应用——数制转换(ANSI C)
题目:将十进制数 src 转换为 k 进制数。原理:N = ( N div k ) x k + N mod k,其中div为整除,mod为取余。void num_sys_convert( int src, int k ){ link_stack ls; init_stack_link( &ls ); while( src != 0 ) { push_link( &ls,原创 2011-12-30 15:02:58 · 663 阅读 · 0 评论 -
数据结构题典021:栈的应用——括号匹配的检验(C++)
题目:假设表达式中允许出现圆括号和方括号,其嵌套顺序随意,设计算法检验给定表达式中的括号是否匹配。/* * Brackets matching algorithm by utilizing stack. * * fduan, Dec. 31, 2011. */bool is_pair( char c1, char c2 ){ return ( c1 == '(' && c2原创 2011-12-31 03:16:18 · 2014 阅读 · 0 评论 -
数据结构题典022:栈的应用——行编辑程序(C语言版)
编写程序实现从终端接收用户输入的数据,并存入用户数据区。输入#表示上一字符无效,输入@表示当前输入行整行无效。/* * line editor by using stack. * * fduan, Dec. 31, 2011. */void line_editor(){ using std::stack; stack ss; std::string li原创 2011-12-31 04:20:23 · 3630 阅读 · 1 评论 -
数据结构题典013:链表合并之二(ANSI C)
题目:设有两个元素递增的单链表(带头结点),编写算法将二者合并为按元素递减排列的链表L,要求利用原表的结点空间存放L。/* * fduan, Dec. 28, 2011. */void calc_union_v2( link_list * lst_a, link_list * lst_b ){ node_ptr pa = *lst_a, pb = *lst_b, p = NULL;原创 2011-12-28 23:50:35 · 807 阅读 · 0 评论 -
数据结构题典010:有序单链表的交集(ANSI C)
题目:设有两个非递减有序的单链表,编写算法求二者的交集(以链表形式存放),要求交集中元素保持递增有序。分析:此题关键是要跳过相邻的重复元素。/* * Intersection of two non-descending linked lists. * * fduan, Dec. 28, 2011. */void intersection( link_list lst_a, l原创 2011-12-28 22:08:45 · 1920 阅读 · 0 评论 -
数据结构题典002:删除单链表中最大元素所在结点(ANSI C)
分析:此题关键在于找到最大元素所在的前驱结点。status_code remove_max_elem_llist( link_list * lst, elem_type * e ){ status_code res = Success; node_ptr h = *lst, p = h, pre_max = p; int max_v = -1000; while( p->next原创 2011-12-25 01:24:13 · 3262 阅读 · 0 评论 -
数据结构题典004:对单链表元素插入排序(ANSI C)
带头结点的单链表void insert_sort_llist( link_list * lst ){ node_ptr h = *lst, p = h->next, r = NULL, q = NULL; h->next = NULL; while( p != NULL ) { q = p->next; r = h; while( r->next != NULL && r原创 2011-12-25 10:38:00 · 749 阅读 · 0 评论 -
数据结构题典006:有序表中冗余元素的删除(ANSI C)
1、顺序表,假设元素已按升序排序/* * remove redundant elements from ordered sequence */int remove_redundant_elem( int c[], int n ){ int i = 0, j = 1; while( j < n ) { if( c[i] != c[j] ) c[++i]原创 2011-12-25 19:24:57 · 774 阅读 · 0 评论 -
数据结构题典007:顺序表中元素块的位置交换(ANSI C)
假设有顺序表 L.elem[] = { a_1, a_2, ..., a_m, | b_1, b_2, ..., b_n },设计算法将L的两部分元素互换,使得 L.elem[] = { b_1, b_2, ..., b_n, |a_1, a_2, ..., a_m }思路一:循环移位,数组整体循环右移n个元素void circ_right_shift( int c[], int len,原创 2011-12-26 00:20:36 · 2219 阅读 · 0 评论 -
数据结构题典005:单链表的复制(ANSI C)
数据结构题典005:单链表的复制(ANSI C)void clone_node( node_ptr src, node_ptr * dst ){ if( src != NULL ) { *dst = ( node_ptr )malloc( sizeof( node ) ); (*dst)->data = src->data; } else *dst = NULL;}原创 2011-12-25 10:48:23 · 758 阅读 · 0 评论 -
数据结构题典003:线性表的就地逆置/翻转(ANSI C)
1、顺序表a) 通过数组下标访问元素/* * 通过数组下标访问 */void reverse_sqlist( int c[], int n ){ int i = 0, j = n - 1; int t; for( ; i < j; ++i, --j ) { t = c[i]; c[i] = c[j]; c[j] = t; }}b) 通过指针访问元素/原创 2011-12-25 02:29:54 · 1066 阅读 · 0 评论 -
数据结构题典008:顺序表的合并(ANSI C)
题意:设有顺序表La和Lb,二者中元素均为非递减有序,空间足够大。设计算法将Lb中的元素合并到La中,使新的La元素仍非递减有序。分析:此题与将两个有序顺序表合并到第三个顺序表中的思路类似,只是为了减少移动次数,比较的次序从两线性表的尾部开始,这样每个元素最多只移动一次。/* * merging of two ordered sequences * * fduan, Dec. 27,原创 2011-12-28 01:25:43 · 866 阅读 · 0 评论 -
数据结构题典009:递归实现单链表逆序数出(ANSI C)
设所考虑单链表含头结点,写出逆序输出表中元素的递归算法。void inv_trav_recur( link_list p ){ if( p != NULL ) { inv_trav_recur( p->next ); printf( "%d ", p->data ); }}void inverse_traverse_llist( link_list lst ){ i原创 2011-12-28 08:56:57 · 1000 阅读 · 0 评论 -
数据结构题典011:有序单链表的并集(ANSI C)
题目:与009类似,但这次是求并集。分析:与有序顺序表归并思路类似,只是注意要处理两个顺序表当前指针指向的元素相同的情形(此时只为并集中增加一项)。/* * Union set of two linked lists which have non-descending order. * * fduan, Dec. 28, 2011. */void calc_union( lin原创 2011-12-28 22:24:52 · 1805 阅读 · 0 评论 -
数据结构题典016:按递增次序输出单链表所有元素(ANSI C)
题目:按递增次序输出单链表所有元素,并释放结点的存储空间。要求不使用数组做辅助空间。#include void min_elem( link_list * lst, node_ptr * min_prev, node_ptr * min_ptr ){ node_ptr p = (*lst)->next, prev = NULL; elem_type min_v = INT_MAX;原创 2011-12-29 02:40:09 · 2994 阅读 · 0 评论 -
数据结构题典012:链表求交集之二(ANSI C)
问题:已知两个按元素递增排列的链表,求二者交集,要求将结果放入第一个链表中。/* * Intersection of two ordered linked lists. * * fduan, Dec. 28, 2011. */void intersect_v2( link_list * lst_a, link_list lst_b ){ node_ptr pa = *lst_a原创 2011-12-28 23:24:09 · 987 阅读 · 0 评论 -
Test
int ex01( LinkedList * lst, int x ){ assert( *lst != NULL ); int n = 0; NodePtr p = ( *lst )->next; NodePtr r = NULL, q = NULL; NodePtr pre = NULL; if( p == NULL ) return n;原创 2015-05-09 02:10:25 · 574 阅读 · 0 评论