数据结构实验

article/2025/10/4 18:39:16

1.有序数组的插入

代码:

bool Insert( List L, ElementType X ){//溢出if(L->Last==MAXSIZE-1) return false;//插入在最后一位if(L->Data[L->Last] > X){L->Data[L->Last+1]=X;L->Last++;return true;}int tp=0;int find=0;int tmp=0;for(int i=0;i <= L->Last;i++){//判断相等时为falseif(L->Data[i] == X) return false;//当大于时插入,只执行一次if(L->Data[i] < X && find==0){tp = L->Data[i];L->Data[i]=X;find=1;} //将插入位置后所有数据向后移动一位if(find==1){tmp=L->Data[i+1];L->Data[i+1]=tp;tp=tmp;}}L->Last++;return true;
}

2.带头结点链栈的操作

代码如下(示例):

Status Push(LinkList L,ElemType e){LNode *node = (struct LNode*)malloc(sizeof(struct LNode));node->data = e;node->next = L->next;L->next = node;
}Status Pop(LinkList L,ElemType *e){*e = L->next->data;L->next = L->next->next;
}

3.优美的括号序列

#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{string input;while (cin >> input){stack<char>st;bool perfect = true;for (auto ch : input){if (ch == '('){st.push(ch);}else if (ch == ')'){if (st.empty()){perfect = false;break;}// else if(st.top()=='(')//     st.pop();else{st.pop();//  perfect = false;// break;}}}if (perfect) perfect = st.empty();cout << (perfect ? "YES" : "NO") << endl;}return 0;
}

4.单链表逆转

#下列代码的功能是返回带头结点的单链表L的逆转链表。List Reverse( List L )
{Position Old_head, New_head, Temp;New_head = NULL;Old_head = L->Next;while ( Old_head )  {Temp = Old_head->Next;Old_head->Next=New_head
;  New_head = Old_head;  Old_head = Temp; }L->Next=New_head
;return L;
}

5.  分糖果(循环线性表)

#include<stdio.h>
#include<stdbool.h>
bool ping(int* a,int n){for(int i=1;i<n;i++)if(a[i]!=a[i-1])return false;return true;
}
void xun(int* a,int n){int b[n];for(int i=0;i<n;i++){b[i]=a[i]/2;a[i]=b[i];}for(int i=0;i<n;i++){a[i]+=b[(i+n-1)%n];}return;
}
int bu(int* a,int n){int sum=0;for(int i=0;i<n;i++){if(a[i]%2!=0){a[i]++;sum++;}}return sum;
}
int main(){int n;scanf("%d",&n);int a[n];for(int i=0;i<n;i++) scanf("%d",&a[i]);int sum=0;while(!ping(a,n)){xun(a,n);sum+=bu(a,n);}printf("%d",sum);
}

 6.表达式转换

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char str[27];
int len;
char stack[27];
int top=0;
int index=0;int IsNum(char c)
{if(c>='0'&&c<='9'||c=='.')return 1;else return 0;
} int compare(char a,char b)
{if(b==')')return 1;if(a=='('||b=='(')return 0;switch(b){case '+':case '-':return 1;case '*':case '/':switch(a){case '+':case '-':return 0;case '*':case '/':return 1;}}
}int ZhengFu(char a)
{if(a=='+'||a=='-')return 1;else return 0;
}void Mainfun()
{int space=0; for(index=0;index<len;index++){//先判断是否为数字,为数字就输出 if(IsNum(str[index])){if(space==1){printf(" ");space =0;}printf("%c",str[index]);}//+ - 这两个符号要进一步判断是否是正负号//判断符号为+-号 并且是在第一位 或者 前一位不是数字和‘)’ 那么这个就是正负号 else if(ZhengFu(str[index])&&( (index==0) || (IsNum(str[index-1])!=1&&str[index-1]!=')') )){//如果是正负号,那么符号需要输出,正号不需要输出if(str[index]=='-'){if(space==1){printf(" ");space=0;}printf("%c",str[index]);} }//如果是运算符 else{if(top!=0)   //栈内有运算符,需要比较 {if(str[index]==')')    //如果是')',就要输出'('之前的所有运算符 {while(top--){if(stack[top]=='(')break;else printf(" %c",stack[top]);} }else{while(top!=0){if(compare(stack[top-1],str[index]))   //来比较运算符 printf(" %c",stack[--top]);elsebreak;}stack[top++]=str[index];}} else   //栈为空,直接入栈 {stack[top++]=str[index];}int j;for(j=0;j<top;j++)if(stack[j]!='('){space=1;break;}}}while(top!=0)printf(" %c",stack[--top]);
}int main()
{scanf("%s",str);len=strlen(str);Mainfun();return 0;
} 

7. 扩展的先序遍历序列创建二叉树

#include <stdio.h>
#include <stdlib.h>typedef char ElementType;
typedef struct BiTNode{ElementType data;struct BiTNode *lchild;struct BiTNode *rchild;
}BiTNode,*BiTree;BiTree CreatBinTree();
void  preorder( BiTree T );int main()
{BiTree T = CreatBinTree();preorder(  T );return 0;
}
void  preorder( BiTree T )
{if(T){printf("%c",T->data);preorder(T->lchild);preorder(T->rchild);}
}
BiTree CreatBinTree()
{char ch;BiTree T;scanf("%c",&ch);if(ch=='#') return 
c
;T=
(BiTree*)malloc(sizeof(BiTree))
;T->data=ch;T->lchild=
CreatBinTree()
;T->rchild=
CreatBinTree()
;return T;
}

8. 计算二叉树的深度

#include<stdio.h>
#include<stdlib.h>
typedef struct BiNode
{char data;struct BiNode *lchild, *rchild;
}BiTNode, *BiTree;void CreateBiTree(BiTree * T)
{char ch;scanf("%c", &ch);if (ch == '#')*T = NULL;else{*T = (BiTree)malloc(sizeof(BiTNode));(*T)->data = ch;CreateBiTree(&(*T)->lchild);CreateBiTree(&(*T)->rchild);}
}int Depth(BiTree T)
{int m, n;if (
T==NULL
)return 0;else{m = 
Depth(T->lchild)
;n = 
Depth(T->rchild)
;if (m > n)return(m + 1);elsereturn (n + 1);}
}int main()
{BiTree tree = NULL;CreateBiTree(&tree);int depth = Depth(tree);printf("%d", depth);return 0;
}

9. 是不是二叉树?

int arr[1000001];
int isTree(TreeNode Head){memset(arr,0,sizeof(arr));return dfs(Head);
}int dfs(TreeNode root){if(root == NULL){return 1;}if(arr[root->data]){return 0;}arr[root->data] = 1;return dfs(root->lchild) && dfs(root->rchild);
}

10. 二叉排序树查找操作


BSTree SearchBST(BSTree T,ElemType e){if(!T||T->data == e)return T;else if(e<T->data)return SearchBST(T->lchild,e);elsereturn SearchBST(T->rchild,e);
}

哈夫曼编码 

#include<stdio.h>
void f(int *a,int n){for(int i=n-1;i>0;i--){for(int j=0;j<i;j++){if(a[j]<a[j+1]){int temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}return;
}
int main(){int n;scanf("%d",&n);int a[n];for(int i=0;i<n;i++) scanf("%d",&a[i]);//*a=f(a,n); for(int i=0;i<n;i++) printf("%d ",a[i]);f(a,n);int sum=0;while(1){if(n==1) break;sum+=(a[n-1]+a[n-2]);int t=a[n-1]+a[n-2];for(int i=n-3;i>=0;i--){if(a[i]<t){a[i+1]=a[i];if(i==0) a[i]=t;}else{a[i+1]=t;break;}}n--;}printf("%d",sum);
}

  新浪微博热门话题

#include <stdio.h>
#include <string.h>
#include <malloc.h>#define MAXLENGTH   1000000 // 散列表大小,要保证装填因子小于一定阈值,否则会因频繁的哈希冲突而超时typedef struct Node
{char *topic;            // 话题int count;              // 当前话题被提及的次数int last;               // 最后一次提及该话题的微博下标(用于去重)
}*Node;Node hashTable[MAXLENGTH];  // 散列表
Node indices[MAXLENGTH];    // 将散列表紧凑化
int sumOfTopics;            // 话题总数void solution();
void handle(char *text, int numberOfWeibo);     // 从文本中查找话题
void normalize(char *topic, int numberOfWeibo); // 将话题形式规范化
int hash(char *topic);                          // 计算散列值(可能越界)
int mod(int n);                                 // 对散列值取余
void insert(char *topic, int numberOfWeibo);    // 将话题插入到散列表int main()
{solution();return 0;
}void solution()
{int n;scanf("%d\n", &n);char buf[141];for (int i = 0; i < n; i++){gets(buf);handle(buf, i);}Node maxTitle = indices[0];int num = 0;for (int i = 1; i < sumOfTopics; i++){if (indices[i]->count > maxTitle->count){maxTitle = indices[i];num = 0;}else if (indices[i]->count == maxTitle->count){if (strcmp(indices[i]->topic, maxTitle->topic) < 0){maxTitle = indices[i];}num++;}}if (maxTitle->topic[0] >= 'a' && maxTitle->topic[0] <= 'z') maxTitle->topic[0] -= 32;printf("%s\n%d\n", maxTitle->topic, maxTitle->count);if (num){printf("And %d more ...\n", num);}
}void handle(char *text, int numberOfWeibo)
{char *first;char *second;char buf[141];while ((first = strchr(text, '#')) != NULL && (second = strchr(first + 1, '#')) != NULL){strncpy(buf, first + 1, second - first - 1);buf[second - first - 1] = '\0';normalize(buf, numberOfWeibo);text = second + 1;}
}void normalize(char *topic, int numberOfWeibo)
{char *text = topic;if (!text || !*text) return;// 将非字母、数字的字符替换为空格while (*text){if (*text >= 'A' && *text <= 'Z') *text += 32;else if (!(*text >= 'a' && *text <= 'z') && !(*text >= '0' && *text <= '9')) *text = ' ';text++;}char *first = NULL;char *second = NULL;char *rear = topic + strlen(topic);// 头部去空格text = topic;while (*text == ' ') text++;memmove(topic, text, rear - text + 1);rear -= text - topic;text = topic;// 中间和尾部去空格for (; *text; text++){if (*text == ' '){first = second = text;while (*second == ' ') second++;if (second - first != 1 && second != rear){memmove(first + 1, second, rear - second + 1);rear -= second - first - 1;}else if(second == rear){*first = '\0';}}}// 将话题插入散列表中insert(topic, numberOfWeibo);
}int hash(char *topic)
{unsigned n = 0;while (*topic){n += *topic - 'a';n <<= 5;topic++;}return n;
}int mod(int n)
{while (n < 0) n += MAXLENGTH;return n % MAXLENGTH;
}void insert(char *topic, int numberOfWeibo)
{int key = hash(topic);int i = 0;int j = 0;// 从中间往两侧探测,处理哈希冲突,找空位for (; i < MAXLENGTH / 2; i++){j = mod(key + i); // 往右侧查找if (hashTable[j]){if (!strcmp(topic, hashTable[j]->topic)){if (hashTable[j]->last == numberOfWeibo) return;++hashTable[j]->count;hashTable[j]->last = numberOfWeibo;}}else break;j = mod(key - i); // 往左侧查找if (hashTable[j]){if (!strcmp(topic, hashTable[j]->topic)){if (hashTable[j]->last == numberOfWeibo) return;++hashTable[j]->count;hashTable[j]->last = numberOfWeibo;}}else break;}// 找到空位后,将新的结点插入到散列表中hashTable[j] = (Node)malloc(sizeof(struct Node));hashTable[j]->topic = (char*)malloc(strlen(topic) + 1);strcpy(hashTable[j]->topic, topic);hashTable[j]->count = 1;hashTable[j]->last = numberOfWeibo;indices[sumOfTopics++] = hashTable[j];
}

 那就别担心了

#include<stdio.h>
int vis[502], path[502],vec[502][502];
int n, m, cnt, a, b;
int DFS(int x) {vis[x] = 1;if(path[x]) return path[x];for(int i=1;i<=n;i++)if(vec[x][i])path[x] += DFS(i);return path[x];
}
int main(){int i;scanf("%d %d",&n,&m);for(i=1;i<=m;i++) {scanf("%d %d",&a,&b);vec[a][b]=1;}scanf("%d %d",&a,&b);path[b] = 1;cnt = DFS(a);int flag = 1;for(i=1;i<=n;i++) {if(vis[i] && !path[i]) {flag = 0;break;}}printf("%d ",cnt);if(!flag)printf("No\n");elseprintf("Yes\n");return 0;
}

 地下迷宫探索

#include<stdio.h>
#include<stdlib.h>#define INFINITY 100000
#define MAXN 1000typedef int Vertex;
typedef int WeightType;
typedef int DataType;typedef struct GNode *PtrToGNode;
typedef PtrToGNode MGraph;
struct GNode
{int Nv;int Ne;WeightType **G;
};typedef struct ENode *PtrToENode;
typedef PtrToENode Edge;
struct ENode
{Vertex V1, V2;WeightType W;
};MGraph CreateGraph(int VertexNum)
{int i,j;MGraph Graph = (MGraph)malloc(sizeof(struct GNode));Graph->Nv = VertexNum;Graph->G = (WeightType **)malloc(Graph->Nv*sizeof(WeightType *));for(i=0; i<Graph->Nv; i++){Graph->G[i] = (WeightType*)malloc(Graph->Nv*sizeof(WeightType));}for(i=0; i<Graph->Nv; i++){for(j=0; j<Graph->Nv; j++)Graph->G[i][j] = INFINITY;}return Graph;
}void InsertEdge(MGraph Graph, Edge E)
{Graph->G[E->V1][E->V2] = E->W;Graph->G[E->V2][E->V1] = E->W;
}MGraph BuildGraph(int N, int M)
{int i;MGraph Graph = CreateGraph(N);Graph->Ne = M;if(Graph->Ne != 0){Edge E = (Edge)malloc(sizeof(struct ENode));for(i=0; i<Graph->Ne; i++){scanf("%d %d", &E->V1, &E->V2);E->V1--;E->V2--;E->W = 1;InsertEdge(Graph, E);}}return Graph;}void Visit(Vertex V)
{printf("%d ", V+1);
}int *Visited;
int SP; //start point. set the global variable to satisfy the output formatvoid DFS(MGraph Graph, Vertex V, void(*Visit)(Vertex))
{Visit(V);Visited[V] = 1;int i;for(i=0; i<Graph->Nv; i++){if(Graph->G[V][i] == 1 && Visited[i] == 0)     //V is adjacent to i, and i is not visited{DFS(Graph, i, Visit);if(V==SP)printf("%d", SP+1);elseVisit(V);}}
}int main()
{int i,N,M;scanf("%d %d %d", &N, &M, &SP);SP = SP-1;MGraph Graph = BuildGraph(N, M);Visited = (int *)malloc(Graph->Nv*sizeof(int));for(i=0; i<Graph->Nv; i++)Visited[i] = 0;DFS(Graph, SP, Visit);int flag = 1;for(i=0; i<Graph->Nv; i++){if(Visited[i] == 0){flag = 0;break;}}if(flag == 0)printf(" %d", 0);return 0;
}

 深入虎穴

#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
vector<int>s[100010];
int track[100010]={0};//这个数组用来标记有前驱的点
int index=0;
void find(int root)//层序搜索函数,搜到不能再往下搜就算找到了最远的门
{queue<int>q;//建立一个队列q.push(root);//把根节点加入队列while(!q.empty())//这就开始时循环着往下遍历了{int now = q.front();q.pop();index=now;for(int i=0;i<s[now].size();i++){int sn=s[now][i];q.push(sn);}}
}
int main()
{int k,m,n,i,j;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&k);for(j=0;j<k;j++){scanf("%d",&m);s[i].push_back(m);track[m]=1;}}for(i=1;i<=n;i++){       if(track[i]==0)//如果没被标记就是无前驱的节点了,从此节点往后遍历用时短{find(i);break;}}printf("%d\n",index);return 0; 
} 

 公路村村通

#include<stdio.h>
#include<string.h>
int map[1001][1001];
int minCost[1001];//记录与该顶点邻接的边最小权值 
int visited[1001];
int N,M;
int min(int a,int b)
{return a > b ? b : a;
}
int prime()
{int i,sum=0,v;for(i=1;i<=N;i++) minCost[i]=99999999;//初始化为最大minCost[1]=0;while(1){v = -1;for(i=1;i<=N;i++)//找到权值最小的边所对应的顶点{if(!visited[i]&&(v==-1||minCost[v]>minCost[i]))v = i;}if(v==-1)break;//说明顶点都已经经过了if(minCost[v]==99999999)return 0;//如果有个孤立顶点,最小权值不会变,可以判断图是否连通		visited[v]=1;sum+=minCost[v];for(i=1;i<=N;i++){if(map[v][i])minCost[i]=min(minCost[i],map[v][i]);//每次更新与顶点邻接的边的最小权值}}for(i=1;i<=N;i++){if(!visited[i])return 0;}return sum;
} 
int main()
{int i;int city1,city2,cost;scanf("%d %d",&N,&M);for(i=0;i<M;i++){scanf("%d %d %d",&city1,&city2,&cost);map[city1][city2]=cost;//为0的值都是不关联的map[city2][city1]=cost;}int sum = prime();if(sum)printf("%d\n",sum);elseprintf("-1\n");return 0;
}

 选择排序

#include<stdio.h>
int main()
{int n,i=0,min,index,k,h,flag=0;;scanf("%d",&n);int a[n];for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n-1;i++){min = a[i];for(k=i+1;k<n;k++){if (min>a[k]){min=a[k];index = k;flag=1;}}if(flag==1){a[index] = a[i];a[i] = min;}flag=0;printf("step %d: ",i+1);for(h=0;h<n;h++)printf("%d ",a[h]);printf("\n");h=0;}printf("sorted array: ");for(h=0;h<n;h++)printf("%d ",a[h]);return 0;
}

 寻找大富翁

#include<stdio.h>
int main(){long long n,i,j,index;int m,t,count=0;int a[1000000];scanf("%lld%d",&n,&m);for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0;i<n-1;i++){if(count==m) break;if(n<m) {if(count==n) break;}index=i;for(j=i+1;j<n;j++)if(a[index]<a[j]) index=j;t=a[index];a[index]=a[i];a[i]=t;count++;}if(n<m){for(i=0;i<n;i++){if(i==0) printf("%d",a[0]);else printf(" %d",a[i]);}}else{for(i=0;i<m;i++){if(i==0) printf("%d",a[0]);else printf(" %d",a[i]);} }return 0;
} 

冒泡法排序

#include<stdio.h>
main(){int n,k,i,j,tmp;scanf("%d%d",&n,&k);int data[n];for(i=0;i<n;i++){scanf("%d",&data[i]);}for(i=0;i<k;i++){for(j=0;j<n-i-1;j++){if(data[j]>data[j+1]){tmp=data[j];data[j]=data[j+1];data[j+1]=tmp;}}}for(i=0;i<n;i++){printf("%d",data[i]);if(i<n-1){printf(" ");}}
}

德才论 

#include <stdio.h>
#include <stdlib.h>
typedef struct student
{int ID_Number;int Morality;int Knowledge;int Score_Sum;				
}student;
int cmp(student stu1,student stu2)
{if(stu1.Score_Sum>stu2.Score_Sum)return 1;else if(stu1.Score_Sum<stu2.Score_Sum)return 0;else if(stu1.Morality>stu2.Morality)return 1;else if(stu1.Morality<stu2.Morality)return 0;else if(stu1.ID_Number<stu2.ID_Number)return 1;else return 0;
}void sort(student stu[],int low,int high)
{if(low>=high)   return;int i=low,j=high;student pivot=stu[i];while(i<j){while(cmp(pivot,stu[j])&&i<j)   j--;stu[i]=stu[j];while(cmp(stu[i],pivot)&&i<j)   i++;stu[j]=stu[i];}stu[i]=pivot;sort(stu,low,i-1);sort(stu,i+1,high);
}
int main()
{int N,L,H;int qualify;if(scanf("%d %d %d",&N,&L,&H)==3){student *stu=(student *)malloc(sizeof(student)*N);for(int i=0,j=i;i<N;i++){scanf("%d %d %d",&stu[j].ID_Number,&stu[j].Morality,&stu[j].Knowledge);stu[j].Score_Sum=stu[j].Morality+stu[j].Knowledge;if(stu[j].Morality>=L&&stu[j].Knowledge>=L)		//如果不及格,后一项覆盖此项j++;qualify=j;		//因为j的作用域在for内,只能这样读,当然也可以在for中用qualify替换j}int end1=0;			//这里开始分类,并找每类考生的首尾下标for(int i=0;i<qualify;i++)if(stu[i].Morality>=H&&stu[i].Knowledge>=H){student temp=stu[end1];stu[end1]=stu[i];stu[i]=temp;end1++;}int end2=end1;end1=end1-1;for(int i=end2;i<qualify;i++)if(stu[i].Morality>=H){student temp=stu[end2];stu[end2]=stu[i];stu[i]=temp;end2++;}int end3=end2;end2=end2-1;for(int i=end3;i<qualify;i++)if(stu[i].Morality>=stu[i].Knowledge){student temp=stu[end3];stu[end3]=stu[i];stu[i]=temp;end3++;}int end4=qualify-1;end3=end3-1;sort(stu,0,end1);sort(stu,end1+1,end2);sort(stu,end2+1,end3);sort(stu,end3+1,end4);printf("%d\n",qualify);for(int i=0;i<qualify;i++){printf("%d %d %d",stu[i].ID_Number,stu[i].Morality,stu[i].Knowledge);if(i!=qualify-1)printf("\n");}}return 0;
}

冒泡排序(函数题)


void bubbleSort(int arr[], int n)
{int flag;for (int i = n - 1; i >= 0; i--){flag = 0;for (int j = 0; j<i; j++){if (arr[j]>arr[j + 1]){swap(&arr[j], &arr[j + 1]);flag = 1;}}if (flag == 0)break;}
}

简单选择排序(函数题) 

void  SelectSort(SqList L)
{int i,j,k;for(i=1;i<L.Length;i++){k=i;for(j=i+1;j<=L.Length;j++){if(L.elem[j]<L.elem[k]) k=j;}if(k!=i){int t=L.elem[k];L.elem[k]=L.elem[i];L.elem[i]=t;}}
}

口罩发放

#include<bits/stdc++.h>
using namespace std;
const int N=30010;struct node
{int id;string name;string sfz;//身份证int stqk;//身体健康情况int h,m;bool st;//身份证是否合法
}E[N];
map<string,int> M;
int idx;bool cmp(node x1,node x2)
{if(x1.h==x2.h){if(x1.m==x2.m)return x1.id<x2.id;return x1.m<x2.m;}return x1.h<x2.h;
}bool test(string op)
{if(op.size()!=18)   return false;for(int i=0;i<18;i++)if(op[i]<'0'||op[i]>'9')return false;return true;
}int main()
{int D,P;cin>>D>>P;for(int i=1;i<=D;i++){int t,s;cin>>t>>s;node e[t+10];for(int j=1;j<=t;j++){cin>>e[j].name>>e[j].sfz>>e[j].stqk;scanf("%d:%d",&e[j].h,&e[j].m);e[j].id=j;e[j].st=test(e[j].sfz);if(e[j].stqk&&e[j].st)E[idx++]=e[j];}sort(e+1,e+1+t,cmp);for(int j=1;j<=t&&s;j++){if(M[e[j].sfz]==0)M[e[j].sfz]=-2*P;if(e[j].st&&(i-M[e[j].sfz]>=P+1)){cout<<e[j].name<<" "<<e[j].sfz<<endl;M[e[j].sfz]=i;s--;}}}for(int i=0;i<idx;i++){if(M[E[i].sfz]!=-1){cout<<E[i].name<<" "<<E[i].sfz<<endl;M[E[i].sfz]=-1;}    }return 0;
}

 

统计专业人数 

int countcs( struct ListNode *head )
{int count = 0;struct ListNode *p;p = head;while (p){if (p->code[1] == '0' && p->code[2] == '2')count++;p = p->next;}return count;
}

 

求二叉树高度  

int GetHeight( BinTree BT ){if(BT==NULL)return 0;int x,y;x=GetHeight(BT->Left)+1;y=GetHeight(BT->Right)+1;return x>y?x:y;
}

 

先输出叶节点 

void PreorderPrintLeaves( BinTree BT ){if(BT!=NULL){if(BT->Left==NULL&&BT->Right==NULL)printf(" %c",BT->Data);PreorderPrintLeaves(BT->Left);PreorderPrintLeaves(BT->Right);}
}

 

 邻接矩阵存储图的深度优先遍历

void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) )
{Vertex j;Visited[V] = true;//表示从V开始访问Visit(V);//访问V,其实抛开题来讲这里一般都是打印Vfor(j = 0;j < Graph->Nv;j++){if(Graph->G[V][j] == 1 && !Visited[j])//邻接矩阵等于1代表有边,此时如果还没被访问就递归调用DFS(Graph,j,Visit);}
}

 

二分查找 

目录

1.有序数组的插入

​编辑

2.带头结点链栈的操作

3.优美的括号序列

4.单链表逆转

5.  分糖果(循环线性表)

 6.表达式转换

7. 扩展的先序遍历序列创建二叉树

8. 计算二叉树的深度

9. 是不是二叉树?

10. 二叉排序树查找操作

哈夫曼编码 

  新浪微博热门话题

 那就别担心了

 地下迷宫探索

 深入虎穴

 公路村村通

 选择排序

 寻找大富翁

冒泡法排序

德才论 

冒泡排序(函数题)

简单选择排序(函数题) 

口罩发放

统计专业人数 

求二叉树高度  

先输出叶节点 

 邻接矩阵存储图的深度优先遍历

二分查找 

 


 

 

 


http://chatgpt.dhexx.cn/article/uAjr0j9k.shtml

相关文章

网络传输大文件使用什么软件可以高速传输?

网络传输大文件使用什么软件可以高速传输&#xff1f;通过网络传输文件总是在速度上得不到很好的体现&#xff0c;更不用说是传输大文件了。本身支持大文件网络传输的工具就是不是很多&#xff0c;很多的传输工具对文件的大小都有所限制&#xff0c;要是想要找到一个高速传输大…

.mmap文件用什么软件可以打开?

1.下载MindManager专属打开它的软件 2。

什么是Saas软件?

人们常常会提及Saas&#xff08;萨斯&#xff09;软件&#xff0c;那么什么是Saas软件呢&#xff1f;首先大家通过百度可以看到百度百科的解释 相信大多数的伙伴们看了之后的感想就是一脸蒙圈&#xff0c;如果让自己给别人介绍什么是Saas软件还是记不住解释不清楚&#xff0c;那…

测试移动信号频率的软件,手机信号工作频段侦测软件

手机信号来源于基站发射的信号。但是常常会遇见的手机信号差&#xff0c;信号弱&#xff0c;上网速度慢等&#xff0c;都有可能是源于信号弱带来的。那么我们看见的手机上显示的信号弱&#xff0c;到底是什么信号弱&#xff1f;如何判别&#xff1f; 这里推荐一款APP软件&#…

杀毒软件可以查杀所有计算机病毒吗,杀毒软件可以查杀所有病毒吗

杀毒软件包括电脑杀毒软件和手机杀毒软件&#xff0c;那么杀毒软件可以查杀所有病毒吗&#xff1f;目前&#xff0c;做到所有病毒查杀还没有一家杀毒软件敢100%保证&#xff0c;因为电脑病毒也在日新月异的发展着&#xff0c;那是不是新病毒就查杀不了呢&#xff1f;也不是&…

可以测试电脑网络速度的软件,介绍4种有用的Internet Speed软件应用程序,用于测试网络速度软件...

当今社会将使用Internet&#xff0c;但是Internet的速度极大地影响了我们的工作和浏览. 在玩游戏和观看视频时测网速什么软件好&#xff0c;拥有一个良好的Internet甚至更为必要. 目前&#xff0c;我们可以使用Internet速度测试软件进行测试. 网络的速度和稳定性使您可以更好地…

什么软件可以测试鬼,PP助手新奇App推荐 《鬼魂探测器》能抓鬼?

最近&#xff0c;小伙伴们迷上了一款奇葩App&#xff0c;据说可以将潜伏在你周围的“阿飘”揪出来。这款软件就是《鬼魂探测器》&#xff0c;听起来是不是有点毛骨悚然&#xff0c;但又忍不住好奇心&#xff0c;通过PP助手下载一探究竟吧。 图1&#xff1a;PP助手(Win)2.0 只要…

测试电脑整机功耗软件,有什么好的测电脑整机功耗的软件吗?

很多人都说电脑的速度越快耗电量就越快&#xff0c;早期的486和现在的P4相比&#xff0c;那简直就是“节能电脑”了&#xff0c;那么想不想知道你的电脑到底有耗电量是多少呢&#xff1f;来试试Overclockulator吧&#xff0c;根据你的选择它可以估算出一台电脑的耗电量。 该软件…

有没有测试颜色的软件,用什么软件测试显示器色彩最准:色彩校正软件

用什么软件测试显示器色彩最准&#xff1a;1.iphone直接显示器校色&#xff0c;这个估计是最有效的方法。有的人可能用不惯iphone的界面&#xff0c;我经常用iphone来测试工程数据&#xff0c;因为iphone有自己的屏幕校色传感器&#xff0c;而iphone的屏幕比一般的显示器都要准…

java用什么软件_Java编程什么软件最好用?

原标题&#xff1a;Java编程什么软件最好用&#xff1f; “工欲善其事必先利其器”&#xff0c;想要学好Java编程开发&#xff0c;除了要有好的学习资源之外&#xff0c;还要有一套适合自己的Java编程软件&#xff0c;好的编程软件能极大提高你的学习和工作效率。那么&#xff…

kml用什么软件打开?

下载安装 bigemap GIS office软件&#xff08;免费就可以) 2、 安装好下载的bigemap软件&#xff0c;直接将kml kmz拖到软件里面就打开了&#xff0c;或者左上角文件打开 选择 kml/kmz 然后选择你的文件 打开记性了。 BIGEMAP支持所有文件格式的打开和保存&#xff0c;如…

可以测试英语发音的软件,检测英语发音的软件

目录 一、音标软件 ①.同求!!!和外国人多说说话。 ②.百度里打“朗酷口语”就可以了~~ 这 个软件可以的!俺也用~~~ 哈哈祝你好运~~。 ③.你好,你说的就跟复读机是一个道理。这种软件不过就是对于人的音频和关键点做了一个发音的匹配度测试,语音库会先前录好没一个单词的发…

测试显卡用什么软件最好,显卡测试用什么软件 怎么测试显卡性能

如果要精确的测试一块显卡的性能则需要一款专业的显卡测试软件,显卡测试用什么软件?像3dmark 11、built-in benchmark tool、gpu-z等软件都是相当优秀的显卡测试软件,另外的测试就是烤机了,可以利用furmark软件烤机测试显卡性能。今天小编就为大家介绍显卡测试的方法。 什么…

有什么软件可以直接拒接所有骚扰电话?3款App让你不再为骚扰电话烦恼

现在大部分智能手机都有自带的拦截功能&#xff0c;可以自动标记可疑的来电号码、对垃圾短信也能起到拦截作用。如果你的手机没有这种功能&#xff0c;也可以下载第三方安全软件进行拦截。 熊猫吃短信app&#xff1a;点击左侧链接下载 熊猫吃短信app是一款值得推荐的垃圾短信过…

什么软件专业测试电脑,测验电脑性能 用什么软件

方法/步骤 1.首先说说电脑的第一个检测&#xff1a;硬件检测&#xff0c;其核心是CPU和GPU(也就是处理器和显卡)。 2.为什么需要这款软件呢&#xff0c;其实在笔记本里这款软件用处不是特别大&#xff0c;因为笔记本配置其实相对很死板(但是硬件详细信息还是有用的&#xff0c;…

有什么软件可以免费下载歌曲?99%不知道这3款软件!

有什么软件可以免费下载歌曲&#xff1f;我们都知道&#xff0c;网络上现在大多数主流音乐软件或手机APP现在都有版权收费限制&#xff0c;在这里推荐几款比较好用的手机端的App和电脑端的一款播放器及下载歌曲的网站。 音乐狂&#xff1a;点击左侧链接下载 音乐狂是一款优秀的…

有什么软件可以提升视频画质,将模糊视频修复清晰?

在素材录制或图像采集过程中&#xff0c;由于各种不可抗拒的因素&#xff0c;画面可能会出现模糊。我们应该如何处理&#xff1f;如何将模糊的视频修复清晰呢&#xff1f; 或许大家在生活中有注意到在各大短视频平台上&#xff0c;哪些经典影视剧修复版的重映屡屡刷屏&#xf…

什么软件可以清除流氓软件

“流氓软件”是介于病毒和正规软件之间的软件。不仅会篡改电脑上的一些信息&#xff0c;还有安装一些捆绑广告插件等等操作&#xff0c;会影响到我们正常的电脑体验。那么该如何清除流氓软件呢&#xff1f;有什么软件可以清除流氓软件&#xff1f;下面小编就教下大家清除流氓软…

除了鲁大师,还有什么软件可以验机?

说到对电脑进行测试的软件&#xff0c;许多用户可能会想起鲁大师&#xff0c;鲁大师作为一款用户常用的电脑检测软件&#xff0c;经常被用作电脑检测的软件。但是鲁大师在使用中会遇到有捆绑广告的问题。因此&#xff0c;在使用中就需要其他软件的协助了&#xff0c;那么下面就…

哪个软件可以识别手写字、这三个软件推荐给你

手写字图片转文字识别技术使用人工智能和机器学习算法来识别手写字形状和笔画的模式&#xff0c;并将其转换为电子文本。这种技术在日常生活中非常有用&#xff0c;并且在许多领域都得到了广泛应用&#xff0c;例如学生们需要将手写笔记转换为电子文档&#xff0c;以方便分享和…