数据结构
文章平均质量分 67
mljlover
这个作者很懒,什么都没留下…
展开
-
数据结构之顺序表实现
顺序表是ADT中的基本类型,它一般用数组来储存数据的数据。顺序表的优点是存储数据方便,缺点是插入和删除数据时,需要移动结点。#include #include //typedef int datatype;//定义顺序表的元素类型#define LIST_INIT_SIZE 20 //顺序表存储空间初始分配量#define LIST_INCREMENT 2 //顺序表存储空原创 2013-06-17 11:08:44 · 710 阅读 · 0 评论 -
数据结构之链栈实现
顺序栈和链栈的优缺点在我就不赘述了,她们只是存储方式的区别罢了。不过链栈的好处就是她存储数据的数量是动态变化的,只在你需要的时候增加或删除。这里需要重提的一个问题是在使用free()函数释放空间后需要将指针置空,防止野指针。typedef struct StackNode{ int data; struct StackNode *next;}StackNode;typedef原创 2013-06-19 14:10:40 · 914 阅读 · 1 评论 -
面试题:向无头单链表的某一已知结点之前插入结点
题目:已知某一无头单链表的某一结点p(不是第一个,也不是最后一个),向该结点之前插入已知结点q。//*****************************************//题目:已知一个不知道头结点的单链表的某一个// 结点(不是头结点也不是最后一个结点),// 怎样在此结点之前插入一个新结点?//***********************原创 2013-06-18 14:42:26 · 1249 阅读 · 0 评论 -
面试题:判断单链表是否为循环链表-快慢指针
题目:判断单链表是否为循环链表(判断链表中是否存在环)分析:使用快慢2个指针,2个指针都从链表头开始遍历,快指针每次移动2个结点,满指针每次移动1个结点。若链表中存在环,则快慢2指针后在链表的某一位置相遇,否则她们不会相遇。typedef struct Lnode{ int data; struct Lnode *next;}*Linklist;//检测单链表是否为循环链表原创 2013-06-19 10:25:12 · 1965 阅读 · 0 评论 -
数据结构之双向链表实现
与单向链表不同,双向链表的每一个结点除了包含数据外,还包含一头一尾2个指针,分别指向他的前驱结点和后继结点,这样在已知某一结点时,查找他的前驱结点和后继结点就很方便。但是因为有2个指针,存储时消耗的空间大,并且操作起来比单向链表复杂。总之一句话,单向链表能做的双向链表都能做,但双向链表能做的单向链表不一定能做。typedef struct DuLNode{ int data; s原创 2013-06-19 09:55:36 · 623 阅读 · 0 评论 -
面试题:从无头链表中删除已知结点
题目:从无头单向链表中删除已知结点(不是头结点也不是最后一个结点)分析:由于是无头单向链表,故无法根据现有的结点找到他的前一个结点,只能找到他 的下一个结点。采用替换的方式,将该结点的下一个结点的内容赋给他,然后删除他的下一个结点,则可以达到目的。//***********************************************//题目:在一个没有头结点的单向链表原创 2013-06-18 10:41:17 · 934 阅读 · 0 评论 -
数据结构之顺序栈实现
栈是一种后进先出(LIFO)的数据存储结构,我们可以把她想象成一个圆筒形的饼干盒,里面的饼干就代表一个一个的数据。当你想要吃饼干的时候,你只能从上到下一块一块的吃。如果上面的饼干没吃完,你无法拿到下面的饼干。同样的,当你往盒子里放饼干的时候,先放进去的饼干总是在盒子的下部,这样当你吃的时候拿的总是你后放进去的饼干。往盒子里放饼干和从盒子里拿饼干吃这2个过程就是我们对栈的2个基本操作:push(放饼原创 2013-06-19 11:21:34 · 734 阅读 · 0 评论 -
数据结构之单向链表实现
在单向链表中,数据被存储在一个一个的“结点”中,这些“结点”在内存中并非是处于相邻的位置,而是“见缝插针”,由系统分配在一小块一小块的内存中。在进行插入数据的操作时,你需要告诉系统你需要一块内存,系统会根据你设定的大小在堆中寻找空闲的内存用来存储新的“结点”;而在进行删除操作时,你需要手动将要删除的“结点”的空间释放掉,同时注意将其置空(NULL)。这样,链表的存储结构克服了顺序表的插入与删除数据原创 2013-06-18 09:56:47 · 588 阅读 · 1 评论