
考研数据结构
是翼不是一
且行且珍惜
展开
-
第二章 线性表-----顺序表
数据元素的地址计算公式:L(ai)=L(a1)+(i-1)*c (c为一个数据元素所占的存储量。)顺序表结构图。1静态顺序存储结构//顺序表的静态存储结构。 #define MaxSize 80 typedef struct{ ElemType elem[MaxSize]; int length;//当前表的长度。 }Sqlisttp;//静态...原创 2019-04-01 17:06:39 · 470 阅读 · 0 评论 -
第三栈——链栈。
链栈是运算受限的单链表,只能在链表头部进行操作。typedef StackNode{ SElemType data; struct StackNode *next;}StackNode,*LinkList;LinkList S; 1:链栈的初始化:void InitStack(LinkStack &S){ //构造一个空栈,栈顶指针置为空。 S=NULL; retu...原创 2019-08-02 23:37:09 · 261 阅读 · 0 评论 -
第二章——循环链表
一:循环链表:是一种头尾相连的链表。(即:表中最后一个结点的指针域指向头结点,整个链表形成一个环)。优点:从表中任一结点出发均可找到表中其它结点。1:带尾指针循环链表的合并(将Tb合并到Ta之后)代码实现:LinkList Connect(LinkList Ta,LinkList Tb){ //假设Ta,Tb都是非空的单循环链表。 p=Ta->next;//1.p存放...原创 2019-07-30 21:57:04 · 215 阅读 · 0 评论 -
第二章——双向链表
双向链表的结构定义如下:typdedef struct DuLNode{ ElemType data; struct DuLNode *prior,*next;}DuLNode,*DuLinkList;```双向循环链表:1:双向链表的插入(ab之间)1:s->prior=p->prior;2:p->prior->next=s;3:s-&g...原创 2019-07-30 22:54:58 · 188 阅读 · 0 评论 -
C语言有关rand(),srand()产生随机数学习总结
srand()就是给rand()提供种子seed如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的,库函数中系统提供了两个函数用于产生随机数:srand()和rand();rand函数:头文件<stdlib.h>定义函数:int rand(void),函数功能:产生随机数,函数说明:因为rand的内部是用线性同余法做的,不是真的随机数,只不过因为其周...原创 2019-08-04 11:12:01 · 725 阅读 · 0 评论 -
第二章——线性表的应用
1:线性表的合并问题描述:假设利用两个线性表La和Lb分别表示两个集合A和B,现要求一个新的集合A=AUBLa=(7,5,3,11) Lb=(2,63) => La=(7,5,3,11,2,6)算法描述:依次取出Lb中的每个元素,执行以下操作:1:在La中查找该元素。2:如果找不到,则将其插入La的最后。void union(List &La,List Lb){ ...原创 2019-07-31 23:18:43 · 568 阅读 · 0 评论 -
第一章——绪论
基本概念和定义:数据:所有能被输入到计算机中,且被计算机处理的符号的集合是计算机操作对象的总称。数据元素:数据的基本单位。在计算机程序中通常作为一个整体进行考虑和处理。数据项:构成数据元素的不可分割的最小单位。数据,数据元素,数据项三者之间的关系:数据 >数据元素 >数据项例如:学生表 >个人记录 >学号,姓名,…数据对象(Data Object):是性质...原创 2019-07-27 07:31:18 · 527 阅读 · 0 评论 -
C基础复习
1.常见的判断是否是素数的程序#include<stdio.h>#include<math.h>int main(){ int num,i; printf("请输入一个整数:\n"); scanf("%d",&num); for(i=2;i<=sqrt(num);i++){ if(num/i==0)break; } if(i>sqr...原创 2019-07-27 22:55:02 · 211 阅读 · 0 评论 -
第二章——栈和递归
1:求阶乘:递归实现:#include <iostream>using namespace std;long Fact(int n){ if(n==0){ return 1;}else{ return n*Fact(n-1);}}int main(){ int n; cin >> n; cout <&...原创 2019-08-06 12:28:13 · 144 阅读 · 0 评论 -
用单链表实现直接插入排序。
代码:#include<stdio.h>#include<stdlib.h>typedef struct Lnode{ int data; struct Lnode*next;}*LinkList,Lnode;LinkList create(LinkList L,int A[],int n){ LinkList p,C; L=(LinkList)mallo...原创 2019-08-24 22:53:17 · 2306 阅读 · 1 评论 -
第三章——顺序栈。
栈(Stack)是一个特殊的线性表,是限定仅在一端(通常为表尾)进行插入和删除操作的线性表。表尾(即an端)称为栈顶(Top),表头(即a1端)称为栈底Base;插入元素到栈顶(表尾)的操作,称为入栈 PUST(X)从栈顶(即表尾)删除最后一个元素的操作,出栈。POP(y).顺序栈的表示和实现。#define MAXSIZE 100typedef struct{ SElemTy...原创 2019-08-02 23:24:22 · 276 阅读 · 0 评论 -
第二章——单链表
一:1:单链表:结点只有一个指针域的链表,称为单链表或线性链表。单链表的表示:typedef struct Node{//声明结点的类型和指向结点的指针类型 ElemType data;//结点的数据域 struct Node *next;// 结点的指针域 }Node,*LinkList; //LinkList为指向结构体Node的指针类型。 定义链表L: LinkLis...原创 2019-07-29 23:08:36 · 633 阅读 · 0 评论 -
第二章——顺序表
线性表是具有相同特性的数据元素的一个有限序列。//静态顺序表。#define LIST_INIT_SIZE 100 //线性存储空间的初始分配量。typedef struct{ ElemType elem[LIST_INIT_SIZE]; int length;//当前长度。}Sqlist;...原创 2019-07-28 23:12:51 · 277 阅读 · 0 评论 -
第二章 线性表-----单链表
一.带头节点的单链表。带头结点非空单链表线性表的单链表的存储结构描述:typedef struct{ ElemType data;//数据域 struct LNode*next;//指针域。 }LNode,*LinkList;头指针为空,L=NULL(不带头结点的单链表为空)。L->next=NULL;(带头结点的空单链表L)。p结点的数据域值:p->dat...原创 2019-04-02 11:14:45 · 307 阅读 · 0 评论 -
第二章 线性表-----循环链表
一.带头结点的非循环双向链表L。非空表。空表:空表条件:L->priorL->next=NULL;.带头结点的双向循环链表L。非空表:空表:空表条件:L->nextL->prior=L.双向链表的结点描述:```typedef struct DuLNode{ ElemType data;//数据域 struct DuLNode*prior;...原创 2019-04-02 11:14:06 · 351 阅读 · 0 评论 -
栈
1顺序栈:类型定义:typedef struct{ int data[maxlength]; int top;}STACK;初始化栈:STACK S;栈的存储容量:maxlength-1;栈空:S.top=-1;栈满:S.top=maxlength-1;站定元素:S.data[S.top]出栈操作:void Pop(STACK &S){ if(Empty(...原创 2019-04-23 14:02:16 · 245 阅读 · 0 评论 -
第8章-排序:直接插入排序
#include<stdio.h>void InsertSort(int R[],int n){ int i,j; int temp; for(i=0;i<n;i++){ temp=R[i]; j=i-1; while(j>=0&&temp<R[j]){ R[j+1]=R[j]; --j; } R[j+1]=te...原创 2019-05-13 23:11:13 · 160 阅读 · 0 评论 -
第5章 数组,矩阵与广义表题目
综合应用题:1.设数组A[0,…,n-1]的n个元素中元素中有多个零元素,设计一个算法,将A中非零元素依次移动到A数组的前端。#include<stdio.h>void movelement(int A[],int n){ int i=-1,j,temp; for(j=0;j<n;j++){ if(A[j]!=0){ ++i; if(i!=j){ ...原创 2019-05-31 23:13:03 · 664 阅读 · 0 评论 -
排序——希尔排序
//希尔排序Shell Sort#include <stdio.h>#include <stdlib.h>void ShellSort(int a[], int length){ int increment; int i,j; int temp; for(increment = length/2; increment > 0; increment /=...原创 2019-07-01 21:47:01 · 194 阅读 · 0 评论 -
排序——冒泡排序
#include<stdio.h>void BubbleSort(int R[],int n){ int i,j,flag; int temp; for(i=n-1;i>=1;--i){ flag=0; for(j=1;j<=i;++j){ if(R[j-1]>R[j]){ temp=R[j]; R[j]=R[j-1]; ...原创 2019-07-01 22:25:21 · 170 阅读 · 0 评论 -
排序——快速排序
#include<stdio.h>void QuickSort(int R[],int low,int high){int temp;int i=low,j=high;if(low<high){temp=R[low];while(i<j){while(j>i&&R[j]>=temp)–j;if(i<j){R[i]=R[j]...原创 2019-07-01 22:42:19 · 143 阅读 · 0 评论 -
排序——简单选择排序
#include<stdio.h>void selectSort(int R[],int n){int i,j,k;int temp;for(i=0;i<n;++i){k=i;for(j=i+1;j<n;++j){if(R[k]>R[j])k=j;}temp=R[i];R[i]=R[k];R[k]=temp;}}void display(...原创 2019-07-01 22:53:52 · 257 阅读 · 0 评论 -
排序——堆排序
#include<stdio.h> int c=0; /*heapadjust()函数的功能是实现从a[m]到a[n]的数据进行调整,使其满足大顶堆的特性*//*a[]是待处理的数组,m是起始坐标, n是终止坐标*/void heapadjust(int a[], int m, int n){ int i, temp; temp=a[m]; f...原创 2019-07-03 17:07:30 · 153 阅读 · 0 评论 -
排序——折半插入排序
代码如下:#include <iostream>using namespace std;void sort(int a[],int n){ int i; int low,high,mid; int temp,j; for(i=1;i<n;i++){ temp=a[i]; low=0; high=...原创 2019-06-30 11:44:49 · 192 阅读 · 0 评论 -
数据结构——七:内部排序
一:插入排序1:直接插入排序:时间复杂度:最好的情况下:O(n) 序列正序最坏的情况下: 移动的次数:1,2,3,4,…n-1 ;总的次数n(n-1)/2 则O(n^2)平均时间复杂度:O(n^2);空间复杂度O(1)稳定排序2:希尔排序:时间复杂度:最好情况下 O(n),最坏情况下O(n^2)平均时间复杂度O(n^1.3)空间复杂度O(1)不稳定排序二:交换排序...原创 2019-07-23 22:46:00 · 147 阅读 · 0 评论