
数据结构
崽崽张不是奶t
崽崽张
展开
-
【树的遍历】
先序遍历 如果树不空 { 建栈,根节点入栈,只要栈不空 {借助p出栈栈顶元素并访问,如果右孩子存在右孩子入栈,左孩子存在左孩子入栈} } void preorder(BTNode *bt) { if(bt!=NULL) { BTNode *Stack[maxsize]; int top=-1;//定义并初始化一个栈 BTNode *p;//遍历指针 Stack(++top)=bt; while(top!=-1) { p=Stack[top--]; printf("%原创 2022-04-11 17:28:55 · 209 阅读 · 0 评论 -
数据结构十套卷
数据结构十套卷代码原创 2021-12-30 12:19:19 · 878 阅读 · 2 评论 -
图的性质总结
图的性质总结原创 2021-12-30 12:18:49 · 652 阅读 · 0 评论 -
树的性质总结
树的性质总结原创 2021-12-30 12:18:05 · 753 阅读 · 0 评论 -
中缀表达式求值
计算中缀表达式 从左至右扫描 遇到数字入结果栈,遇到左括号直接入操作符栈,遇右括号则从结果栈出栈 两个元素x,y 从操作符栈出栈一个元素执行y op x,并将结果入结果栈直至运算符栈栈顶元 素是左括号,然后将左括号丢掉;遇到操作符,若当前优先级高于栈顶元素优先级,则直接 入栈,否则循环从结果栈出栈两个元素x,y 从操作符栈出栈一个元素执行y op x,并将结果入结 果栈; 计算后缀表达式 从左至右扫描遇到数字入栈 遇到操作符 从栈中依次出栈两个元素x,y 执行y op x;并将结果 入栈 计算原创 2021-09-11 11:19:05 · 93 阅读 · 0 评论 -
中缀转后缀
#include<stdio.h> #define MAXSIZE 100 int getPriority(char op)//得到优先级 { if(op=='+'||op=='-') return 0; else if(op=='*'||op=='/') return 1; } int compare(char op1,char op2)//比较优先级 op1为当前,op2为栈顶 { int i=getPriority(op1); int j=getPriority(op原创 2021-09-06 23:56:48 · 123 阅读 · 0 评论 -
括号匹配算法
#include<stdio.h> #define MAXSIZE 100 int match() { char str[MAXSIZE]; printf("请输入字符串"); scanf("%s",str); char *s=str;//用指针s遍历字符串数组中的字符 char S[MAXSIZE]; int top=-1; while(*s!=NULL) { if(*s=='('||*s=='['||*s=='{') { S[++top]=*s; s++原创 2021-09-06 21:44:52 · 157 阅读 · 0 评论 -
栈和队列总结(1800)
队列 (1)若用单链表来表示队列,最适合的是带尾指针的循环链表; (2)最适合的队列链表结构是双向循环链表; (3)用设置尾指针的循环链表表示队列,出对入队操作都为O(1) (4)在链队中,即使不设置尾指针也能进行入队操作(从队头指针可以查到队尾) 栈 (1)栈在递归调用、子程序调用和表达式求值中应用; (2)一个递归算法必须包括终止条件和递归部分; (3)栈是实现过程和函数等子程序所必需的结构 (4)消除递归不一定要使用栈; (5)n个元素依次进栈,出栈共有Cn种方式,Cn=[1/(n+1)](2n!)/原创 2021-09-02 14:58:46 · 605 阅读 · 0 评论 -
线性表总结(1800)
typedef struct LNode { int data; struct LNode *next; }LNode; 带头结点单链表逆置 /*p负责将元素从旧链表中转入新链表,q负责标记旧链表中下一个要被转移的元素, 在p转移元素时“看家”,等p将元素插入新链表之后,将q赋值给p,让p“回家”*/ void reverse(LNode *L) { LNode *p,*q; p=L->next; L->next=NULL; while(p!=NULL) { q=p->原创 2021-09-01 10:15:07 · 584 阅读 · 0 评论 -
链队基本操作
#include<stdio.h> #include<stdlib.h> 队列结点类型定义 typedef struct QNode { int data; struct QNode *next; }QNode; 队列结构类型定义 typedef struct LQueue { QNode *front; QNode *rear; }LQueue; 链队初始化 void init(LQueue *&Q) { Q=(LQueue*)malloc(sizeof(原创 2021-08-23 10:28:31 · 222 阅读 · 0 评论 -
一般配置顺序队列基本操作
配置:rear指向队尾元素 front的下一个位置为队头元素 #include<stdio.h> #define MAXSIZE 100 结构体定义 typedef struct LNode { int data[MAXSIZE]; int front,rear; }LNode; 队列初始化 void init(LNode &L) { L.front=0; L.rear=0; } 元素入队 void enqueue(LNode &L,int x) { L.rear原创 2021-08-23 08:56:20 · 151 阅读 · 0 评论 -
带头结点单链表原地逆置
结构类型定义 typedef struct LNode { int data; struct LNode *next; }LNode; 链表原地逆置 void converse(LNode *L) { LNode *p,*q; p=L->next; L->next=NULL; while(p) { q=p;//将p赋给q; p=p->next;//p指针后移 q->next=L->next;//q指针头插插入头指针之后 L->next=q;原创 2021-08-18 20:10:38 · 448 阅读 · 0 评论 -
一个带头结点的单链表,找出最小值,若最小值是奇数则将其删除
#include<stdio.h> #include<stdlib.h> 结构体定义 typedef struct LNode { int data; struct LNode *next; }LNode,LinkList; 尾插法建表 void createR(LNode *&L,int n) { LNode *r,*s; L=(LNode*)malloc(sizeof(LNode)); L->next=NULL;//建立头指针 r=L;//r始终指向原创 2021-08-18 15:26:35 · 1324 阅读 · 0 评论 -
栈的基本操作
#include<stdio.h> #include<stdlib.h> #define maxsize 100 顺序栈结构体定义 typedef struct SqStack { int data[maxsize]; int top; }SqStack; 链栈结构体定义 typedef struct LNode { int data; struct LNode *next; }LNode; 顺序栈初始化 void InitSqStack(SqStack &S原创 2021-08-15 08:50:11 · 166 阅读 · 0 评论 -
排序(链表)
单链表结构体定义 typedef struct SqList { int *elem; int length; }SqList; 初始化线性表 void InitSq(SqList &L) { L.elem=(int*)malloc(sizeof(int)); if(!L.elem) exit(-1); L.length=0; } 建表 void create(SqList &L,int n) { int e; for(int j=0;j<n;j++) {原创 2021-08-14 21:03:16 · 320 阅读 · 0 评论 -
单链表的创建及基本操作
结构体定义 typedef struct LNode { int data; LNode *next; }LNode; 尾插法建表 void createR(LNode *&L,int n) { LNode *r,*s; L=(LNode*)malloc(sizeof(LNode)); r=L; for(int i=0;i<n;i++) { s=(LNode*)malloc(sizeof(LNode)); scanf("%d",&s->data); s原创 2021-08-12 09:07:14 · 361 阅读 · 0 评论 -
顺序表的操作升级版
合并两个有序顺序表 int mergeSqList(SqList La,SqList Lb,SqList &Lc) //把递增的表La和Lc合并成新的Lc使其仍然保持升序 { int i=0; //遍历La int j=0; //遍历Lb int k=0; //k指向Lc中最后一个位置 Init(Lc); //初始化Lc while(i<La.length&&j<Lb.length)//两张表都没有检查完 { if(La.elem[i]<=Lb原创 2021-08-10 13:52:50 · 143 阅读 · 0 评论 -
顺序表创建和基础操作
顺序表的创建及操作 顺序表结构体定义 typedef struct SqList { int *elem;//元素 int length;//元素个数 int listsize;//表长 } 顺序表初始化: void InitSqList(SqList &L) { L.elem=(int*)malloc(sizeof(int));//申请地址空间 if(!L.elem)//申请失败 exit(-1); L.length=0;//线性表元素个数为0 L.listsize=InitS原创 2021-08-09 15:57:24 · 495 阅读 · 0 评论