![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 72
wangsimiao118
这个作者很懒,什么都没留下…
展开
-
顺序表应用1:多余元素删除之移位算法
刚开始写完后,出现了一个错误,只要输入几个相同的数,就会输出两个一样的数(应该只输出一个的),检查了好长时间,原来是循环的过程中忘记把 i 的值减一了,导致每个数第二次的比较出现错误。上午听了一上午的课,又写了一下午,终于做出了这道题,真的好难啊!!!不过,终于迈出了第一步,值得高兴,继续努力,加油!原创 2016-07-26 19:02:33 · 1365 阅读 · 0 评论 -
数据结构实验之栈五:下一较大值(一)
这道题的算法思想就是:将数组中的每个元素与其后的元素逐个比较,若小于后面的元素,则输出,并结束此次循环,若找不到,则输出-1。代码如下:#include int main(){ int n,m,i,j; int a[1000]; scanf("%d",&n); while(n){ scanf("%d",&m);原创 2016-08-04 10:48:57 · 293 阅读 · 0 评论 -
数据结构上机测试2-1:单链表操作A
这道题的算法思想就是顺序建立一个链表,然后将表中的元素逐个与指定的值比较,若与p相等,则找到其前一个结点q,然后删除p结点即可。代码如下:#include #include struct node{ int data; struct node* next;};struct node* Createlist(int n){/*顺序建立链表*/ s原创 2016-08-04 15:56:43 · 381 阅读 · 0 评论 -
数据结构上机测试2-2:单链表操作B
这道题的算法思想就是逆序建立一个单链表,然后逐个比较并删除其中的重复元素,在删除结点时需找到其前一个结点的位置。代码如下:#include #include struct node{/*单链表的定义*/ int data; struct node* next;};struct node* Createlist(int n){/*逆序建立单链表*/原创 2016-08-04 16:47:01 · 353 阅读 · 0 评论 -
不敢死队问题
这道题的算法思想就是构建一个循环链表,然后将排长设为头结点,设置一个标记变量k,用来记录走过的结点数,当结点数等于5的倍数时,判断当前结点是不是头结点,若是,则输出k/5;若不是,则删除当前结点,继续循环。代码如下:#include #include struct node{ int data; struct node* next;};struct no原创 2016-08-04 21:12:41 · 2243 阅读 · 0 评论 -
约瑟夫问题
这道题的算法思想就是先创建一个循环链表,然后在建一个指针,使其始终跟在头指针的后面,方便删除指定的结点。代码如下:#include #include struct node{ int data; struct node* next;};struct node *p;struct node* Createlist(int n) /*创建一个循环链表原创 2016-08-05 14:12:12 · 283 阅读 · 0 评论 -
多项式求和
这道题的算法思想就是利用链表来处理大量的数据,减少递推的时间,从而节省时间。代码如下:#include #include struct node{/*建立一个双向链表*/ int data; struct node* pre,*next;};int main(){ int n,m,i; double s,d; scanf("原创 2016-08-05 15:54:26 · 446 阅读 · 0 评论 -
数据结构实验之栈六:下一较大值(二)
这道题的算法思想就是:通过建立一个结构体来管理输入的元素并记录输入元素的位置,将输入的元素依次与栈顶元素相比较,小于栈顶元素的则放入栈中,大于栈顶元素的将其放入结构体的另一个类型中,并将当前栈顶元素出栈。代码如下:#include #include using namespace std;struct node{ int data; int nextdata转载 2016-08-06 15:01:08 · 913 阅读 · 0 评论 -
数据结构实验之栈七:出栈序列判定
这道题的算法思想就是:让初始的的入栈序列的第一个入栈,然后比较栈顶元素与输入的出栈序列比较,若不相等则让初始得入栈序列继续入栈,直至找到与其相等的入栈序列元素,然后将栈顶元素出栈,输入的出栈序列向后移动一个,再进行比较。代码如下:#include #include #define maxsize 10020typedef struct{/*栈的定义*/ int dat原创 2016-08-06 19:01:37 · 282 阅读 · 0 评论 -
数据结构实验之二叉树二:遍历二叉树
这道题的算法思想就是通过递归的思想来建立二叉树和遍历二叉树。代码如下:#include #include #include char ch[53];/*定义全局变量数组,方便下面的多组输入*/int len,len1;struct node{/*二叉树的定义*/ char data; struct node *lchild,*rchild;};原创 2016-08-08 16:58:01 · 261 阅读 · 0 评论 -
数据结构实验之二叉树的建立与遍历
这道题的算法思想就是利用好递归的思想建立二叉树,然后对二叉树进行操作。代码如下:#include #include #include char a[55];int len,i;struct node{/*二叉树的定义*/ char data; struct node *lchild,*rchild;};struct node* Createt原创 2016-08-08 19:55:03 · 368 阅读 · 0 评论 -
数据结构实验之二叉树三:统计叶子数
代码如下:#include #include #include char a[55];int len,i;struct node{/*二叉树的定义*/ char data; struct node* lchild,*rchild;};struct node *Createtree(){/*利用先序遍历的数据建立二叉树*/ struct原创 2016-08-08 20:37:53 · 322 阅读 · 0 评论 -
数据结构实验之栈八:栈的基本操作
这道题主要是考察栈的进栈和出栈操作,需要注意的是输出是要注意输出的格式,看清题目要求。代码如下:#include #include #define maxsize 100using namespace std;typedef struct{/*栈的定义*/ int data[maxsize]; int top;}Seqstack;Seqstack原创 2016-08-09 09:41:40 · 258 阅读 · 0 评论 -
数据结构实验之栈:行编辑器
这道题的算法思想就是:利用栈只能在其一端操作的思想,通过建立栈,比较输入字符来进行入栈和出栈。代码如下:#include #include #include #define maxsize 255typedef struct{/*栈的定义*/ char data[maxsize]; int top;}Seqstack;Seqstack *Init原创 2016-08-09 10:36:37 · 358 阅读 · 0 评论 -
进制转换
这道题的算法思想就是:把n%r入栈,再把n=n/r;直到n等于0,注意输出是将大于等于10和小于等于-10的数转换为相应的ascii值;并判断n是否为0,(因为忘记判断,错了好几次)。代码如下:#include #include #define maxsize 100typedef struct{/*栈的定义*/ int data[maxsize]; int原创 2016-08-09 15:07:40 · 222 阅读 · 0 评论 -
算术表达式的转换
这道题的算法思想就是:关键就是求前缀式,我问可以在求完中缀和后缀式后,将输入的字符串先逆置,再对逆置后的字符串求后缀式,最后将求得的后缀式逆序输出即为其前缀式。代码如下:#include #include #include #define maxsize 1000typedef struct{/*栈的定义*/ char data[maxsize]; in原创 2016-08-09 19:37:19 · 271 阅读 · 0 评论 -
数据结构实验之栈四:括号匹配
这道题的算法思想就是:将(,[,{放入栈中,然后再让后面的括号与栈顶元素比较,若相同,则出栈,不同的话,输出no,并清空栈内元素;注意每次输出后一定要清空栈内元素。代码如下:#include #include #include #define maxsize 100using namespace std;typedef struct{ char data[ma原创 2016-08-04 10:06:33 · 279 阅读 · 0 评论 -
数据结构实验之栈三:后缀式求值
这道题的算法思想就是:当输入的字符是数字字符时,将它转换成整数并压入栈中;当输入的字符是操作符时,将栈中的栈顶的两个元素取出并用这个运算符计算,然后将这两个元素出栈,将它们的运算结果进栈;最后输出栈顶元素即可。代码如下:#include #include #define maxsize 10000typedef struct{ int data[maxsize];原创 2016-08-03 20:29:48 · 286 阅读 · 0 评论 -
顺序表应用2:多余元素删除之建表算法
这道题的主要思想是在已经建好的表的基础上,利用旧表申请的空间,删除冗余元素。#include #include #include #define LISTSIZE 10000typedef struct{ int *elem; int length; int listsize;}Sqlist;int Initialist(Sqlist *L原创 2016-07-28 09:38:24 · 322 阅读 · 0 评论 -
顺序表应用3:元素位置互换之移位算法
这道题的主要思想是依次移动元素的位置来实现元素位置的互换。#include #include #include #define LISTSIZE 100typedef struct{ int *elem; int length; int listsize;}Sqlist; int Initialist(Sqlist *L){/*顺序表的初始原创 2016-07-28 11:05:02 · 630 阅读 · 0 评论 -
顺序表应用4:元素位置互换之逆置算法
#include #include #include #define LISTSIZE 100typedef struct{ int *elem; int length; int listsize;}Sqlist;int Initialist(Sqlist *L){/*顺序表的初始化*/ L->elem=(int *)malloc(L原创 2016-07-29 09:35:04 · 964 阅读 · 0 评论 -
顺序表应用5:有序顺序表归并
算法思想:依次扫描A和B中的元素,比较A,B当前元素的大小,并把较小的赋给C,最后把A或B中未被比较的元素都赋给C即可。#include #include #include #define LISTSIZE 10000typedef struct{ int *elem; int length; int listsize;}Sqlist;in原创 2016-07-29 14:21:33 · 283 阅读 · 0 评论 -
顺序表应用6:有序顺序表查询
这道题的算法思想就是利用二分查找来缩短查找的时间。#include #include #include #define LISTSIZE 20000typedef struct{ int *elem; int length; int listsize;}Sqlist;int Initialist(Sqlist *L){ L->el原创 2016-07-29 19:20:03 · 404 阅读 · 0 评论 -
数据结构实验之链表二:逆序建立链表
这道题的算法思想是从头部插入的方法建立链表。#include #include #include struct node{/*链表的定义*/ int data; struct node* next;};struct node* Creatlist(int n){/*创建链表,从头部插入*/ struct node* head,*p;/*定义结构原创 2016-07-30 15:14:40 · 2453 阅读 · 0 评论 -
数据结构实验之链表一:顺序建立链表
这道题的算法思想是从尾部插入元素来建立单链表。#include #include struct node{/*单链表的定义*/ int data; struct node* next;};struct node* Creatlist(int n){/*从尾部插入,创建单链表*/ struct node* head,*tail,*p;/*需要定义一个原创 2016-07-30 16:31:07 · 256 阅读 · 0 评论 -
数据结构实验之链表三:链表的逆置
这道题的算法思想就是先建立一个顺序链表,然后再建一个空表,在head和head->next之间不断插入新的结点。代码如下:#include #include struct node{ int data; struct node* next;};void Putlist(struct node* head){/*输出函数*/ struct nod原创 2016-07-30 20:57:38 · 706 阅读 · 0 评论 -
数据结构实验之链表四:有序链表的归并
这道题的算法思想是建立一个空表,通过建立顺序链表,让指针依次指向原来两个链表中较小的元素。代码如下:#include #include struct node{/*单链表的定义*/ int data; struct node* next;};struct node* Createlist(int n){/*顺序建立单链表*/ struct no原创 2016-08-01 10:26:36 · 1491 阅读 · 0 评论 -
数据结构实验之链表五:单链表的拆分
这道题的算法思想就是将一个单链表拆分成两个单链表,也就是说再建立两个单链表,在其中加入控制条件即可。代码如下:#include #include struct node{ int data; struct node* next;};struct node* Createlist(int n){ struct node* head,*tail,*原创 2016-08-01 14:44:52 · 889 阅读 · 0 评论 -
数据结构实验之链表六:有序链表的建立
这道题的算法思想就是通过比较已经建好链表中的元素,排序的同时建立新的单链表。代码如下:#include #include struct node{ int data; struct node* next;};struct node* Createlist(int n){/*建立顺序单链表*/ struct node* head,*tail,*p原创 2016-08-01 17:09:36 · 324 阅读 · 0 评论 -
数据结构实验之链表七:单链表中重复元素的删除
这道题的算法思想就是逆序建立一个单链表,然后通过逐个比较元素找到重复元素,关键在于要设定一个指针,让它始终跟在寻找重复元素指针的后面。代码如下:#include #include struct node{ int data; struct node* next;};struct node* Createlist(int n){/*逆序建立单链表*/原创 2016-08-01 20:42:38 · 3811 阅读 · 0 评论 -
数据结构实验之链表八:Farey序列
这道题的算法思想就是建立一个有两个数值域的单链表,分别代表分子和分母,然后通过比较两个分母之和与n的大小,插入新的结点。代码如下:#include #include struct node{ int data1,data2; struct node* next;};void Createlist(struct node* head,int n){原创 2016-08-02 15:13:08 · 554 阅读 · 0 评论 -
数据结构实验之栈一:进制转换
代码如下:#include #include #define MAXSIZE 100typedef struct{/*栈的定义*/ int data[MAXSIZE]; int top;}Seqstack;Seqstack *Initstack(){/*栈的初始化*/ Seqstack *s; s=(Seqstack *)malloc原创 2016-08-02 18:42:29 · 314 阅读 · 0 评论 -
数据结构实验之栈二:一般算术表达式转换成后缀式
这道题的算法思想就是:先定义运算符的优先级;然后,1、设定运算符栈;2、将栈底元素设为'#';3、扫描表达式,若当前字符是操作数,则直接把它发送给后缀表达式;4、若当前字符为运算符且优先级大于栈顶运算符,则进栈,否则退出栈顶运算符并将其发送给后缀式。然后将当前运算符放入栈中;5、若当前字符是结束符,则将栈中的全部运算符依次发送给后缀式。6、若当前字符为"(",进栈;7、若当前字符为")",则从栈顶原创 2016-08-03 14:15:27 · 258 阅读 · 0 评论 -
数据结构实验之二叉树五:层序遍历
这道题的算法思想就是:按照先序遍历的顺序建立一个二叉树,然后利用结构体数组进行层次遍历,层次遍历时,注意要把每个结点的左右结点存入结构体数组。代码如下:#include #include #include char a[55];int len,i;struct node{ int data; struct node* lchild,*rchild;原创 2016-08-09 21:40:27 · 268 阅读 · 0 评论 -
数据结构实验之二叉树一:树的同构
这道题的算法思想就是在建立好的二叉树的基础上,通过依次遍历两个二叉树,比较两个二叉树的同一结点的左右孩子结点来确认它们是否同构。代码如下:#include#include#includeint visited[100];int num=0;struct node{ char data; struct node *lchild,*rchild;转载 2016-08-10 15:37:36 · 527 阅读 · 0 评论 -
数据结构实验之查找五:平方之哈希表
这道题的关键在于如何实现平方探测法,在充分了解平方探测法的基础上,利用原来位置来加减i的平方左右依次探测。代码如下:#include #include int main(){ int n,p,i,d,id; int Hash[550],v[550]; while(scanf("%d %d",&n,&p)!=EOF){ int len=原创 2016-08-17 10:07:26 · 1189 阅读 · 0 评论 -
数据结构实验之查找七:线性之哈希表
这道题的关键在于判断是否存在相同的元素,相同的元素必须放在同一个位置。代码如下:#include #include int main(){ int n,p,i,d,id; int Hash[1015],v[1015]; while(scanf("%d %d",&n,&p)!=EOF){ int len=0; mems原创 2016-08-17 11:28:21 · 216 阅读 · 0 评论 -
交叉排序
这道题主要是用冒泡排序的思想,分别对不同位置上的元素进行排序。代码如下:#include int main(){ int n,i,j,d; int a[110]; scanf("%d",&n); for(i=0;i scanf("%d",&a[i]); for(i=0;i for(j=i+2;j原创 2016-08-17 14:23:55 · 637 阅读 · 0 评论 -
找女朋友
这道题的算法思想就是快速排序:通过一趟排序将一组元素分割成独立的两部分,其中一部分的元素均比另一部分的元素小,则可分别对这两部分元素继续进行排序,使整个序列有序。代码如下:#include int a[1000000];void QuickSort(int low,int high){/*快速排序函数*/ int p; if(low p=Par原创 2016-08-17 19:57:13 · 294 阅读 · 0 评论 -
数据结构实验之排序一:一趟快排
这道题是利用快排的一趟排序的思想,将比枢轴大的均放在它的右边,将比枢轴小的均放在它的左边。代码如下:#include int a[100000];int main(){ int n,i,j,p,d; while(scanf("%d",&n)!=EOF){ for(i=0;i scanf("%d",&a[i]);原创 2016-08-17 20:19:01 · 376 阅读 · 0 评论