10个数据结构课程设计例子(C语言完整源码)二叉排序树、快速排序、冒泡排序、二叉树非递归遍历

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

{
	root=p;
	return p;
}
q=root;
while(flag==0)//标志完成插入
{
	if(q->key>x)
	{
		if(q->left!=NULL)
			q=q->left;
		else
		{
			q->left=p;//在左子数插入
			flag=1;
		}
	}
	else
	{
		if(q->right!=NULL)
			q=q->right;
		else
		{
			q->right=p;//在右子树插入
			flag=1;
		}
	}
}
return root;

}
void Inorder(struct Bnode *BD)
{
if(BD!=NULL)
{
Inorder(BD->left);
printf(“%5d”, BD->key);
Inorder(BD->right);
}

}
void main()
{
int i,length;
int a[MAX];
Bnode *root=NULL;
printf(“输入数组大小:”);
scanf(“%d”,&length);
for(i=0;i<length;i++)
{
scanf(“%d”,&a[i]);
root=btlnsert(a[i],root);
}
printf(“输出所给排序为:\n”);
Inorder(root);
}


## 3、二叉树层次遍历.c



/***********************************************************
我的信息: *
编程ID
***********************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MS 50
struct BTreeNode
{
char date;
struct BTreeNode *lchild;
struct BTreeNode *rchild;
};
typedef struct BTreeNode TNODE;
TNODE *creat(int n)
{
int i,j;
char x;
TNODE *narr[100],*p,*t;
for(j=1;j<=n;j++)
{
printf(“input i,x:\n”);
scanf(“%d,%c”,&i,&x);
p=(TNODE*)malloc(sizeof(TNODE));
p->date=x;
p->lchild=NULL;
p->rchild=NULL;
narr[i]=p;
if(i1)
t=p;
else
{
if(i%2
0)
narr[i/2]->lchild=p;
else
narr[i/2]->rchild=p;
}
}
return(t);
}
void Inorder(struct BTreeNode *BT)
{
if(BT!=NULL)
{
Inorder(BT->lchild);
printf(“%5c”, BT->date);
Inorder(BT->rchild);
}

}
void levelerder(struct BTreeNode *BT )
{
struct BTreeNode *q[MS];
int front=0,rear=0;
if(BT!=NULL)
{
rear=(rear+1)%MS;
q[rear]=BT;
}
while(front!=rear)
{
struct BTreeNode *p;
front=(front+1)%MS;
p=q[front];
printf(“%5c”,p->date);
if(p->lchild!=NULL)
{
rear=(rear+1)%MS;
q[rear]=p->lchild;
}
if(p->rchild!=NULL)
{
rear=(rear+1)%MS;
q[rear]=p->rchild;
}
}
}
void main()
{
TNODE *t;
int a;
printf(“input the number of BTreeNode\n”);
scanf(“%d”,&a);
t=creat(a);
Inorder(t);
levelerder(t);
}


## 4、二叉树非递归遍历.c



/***********************************************************
我的信息: *
编程ID
***********************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MS 50
struct BTreeNode
{
char date;
struct BTreeNode *lchild;
struct BTreeNode *rchild;
};
typedef struct BTreeNode TNODE;
TNODE *creat(int n)
{
int i,j;
char x;
TNODE *narr[100],*p,*t;
for(j=1;j<=n;j++)
{
printf(“input i,x:\n”);
scanf(“%d,%c”,&i,&x);
p=(TNODE*)malloc(sizeof(TNODE));
p->date=x;
p->lchild=NULL;
p->rchild=NULL;
narr[i]=p;
if(i1)
t=p;
else
{
if(i%2
0)
narr[i/2]->lchild=p;
else
narr[i/2]->rchild=p;
}
}
return(t);
}
void Preorder(struct BTreeNode *BT)
{
if(BT!=NULL)
{
printf(“%5c”, BT->date);
Preorder(BT->lchild);
Preorder(BT->rchild);
}

}
void Inorder(struct BTreeNode *BT)
{
if(BT!=NULL)
{
Inorder(BT->lchild);
printf(“%5c”, BT->date);
Inorder(BT->rchild);
}

}
void Postorder(struct BTreeNode *BT)
{
if(BT!=NULL)
{
Postorder(BT->lchild);
Postorder(BT->rchild);
printf(“%5c”, BT->date);
}

}
void PreorderN(struct BTreeNode *BT)
{
struct BTreeNode *s[20];
int top=-1;
struct BTreeNode *p=BT;
while(top!=-1||p!=NULL)
{
while(p!=NULL)
{
top++;
s[top]=p;
printf(“%5c”,p->date);
p=p->lchild;
}
if(top!=-1)
{
p=s[top];
top–;
p=p->rchild;
}
}
}
void InorderN(struct BTreeNode *BT)
{
struct BTreeNode *s[20];
int top=-1;
struct BTreeNode *p=BT;
while(top!=-1||p!=NULL)
{
while(p!=NULL)
{
top++;
s[top]=p;
p=p->lchild;

	}
	if(top!=-1)
	{
		p=s[top];
		top--;
		printf("%5c",p->date);
		p=p->rchild;
	}
}

}
void PostorderN(struct BTreeNode *BT)
{
struct BTreeNode *s[20];
int top=-1,flag=1;
struct BTreeNode *p=BT,*q;
do{
while(p!=NULL)
{
top++;
s[top]=p;
p=p->lchild;
}

	q=NULL;
	flag=1;
		while(top!=-1&&flag)
		{
			p=s[top];	
			if(p->rchild==q)
			{
				printf("%5c",p->date);	          
				top--;
				q=p;
			}
			else
			{
			    p=p->rchild;	
				flag=0;
			}	
		}
}while(top!=-1);

}
void main()
{
TNODE *t;
int a;
printf(“input the number of BTreeNode\n”);
scanf(“%d”,&a);
t=creat(a);
printf(“中序遍历:”);
Inorder(t);
printf(“\n”);
InorderN(t);
printf(“\n”);
printf(“先序遍历:”);
Preorder(t);
printf(“\n”);
PreorderN(t);
printf(“\n”);
printf(“后序遍历:”);
Postorder(t);
printf(“\n”);
PostorderN(t);
printf(“\n”);
}


## 5、二叉树建立.c



/***********************************************************
我的信息: *
编程ID
***********************************************************/
void preorder1(bitree *root)
{
bitree *p,*s[100];
int top=0;
p=root;
while((p!=NULL)||(top>0))
{
while(p!=NULL)
(cout<data<<" “;
s[++top]=p;//
p=p->lchild;
}
p=s[top–];
p=p->rchild;
}
}
void inorder1(bitree *root)
{
bitree *p,*s[100];
int top=0;
p=root;
while((p!=NULL)||(top>0))
{
while(p!=NULL)
{
s[++top]=p;p=p->lchild;
}
{
p=s[top–];
cout<data<<”“;
p=p->rchild;
}
}
}
void postorder1(bitree *root)
{
bitree *p,*s1[100];
ints2[100],top=0,b;
p=root;
do
{
while(p!=NULL)
{
s1[top]=p;s2[top++]=0;
p=p->lchild;
}
if(top>0)
{
b=s2[–top];
p=s1[top];
if(b==0)
{
s1[top]=p;
s2[top++]=1;
p=p->rchild;
}
else
{
cout<data<<” ";
p=NULL;
}
}
}while(top>0);
}
void main()
{
bitree *root;
root=create();
cout<<“先序遍历的结果”<<endl;
preorder1(root);cout<<end1;
cout<<“中序遍历的结果”<<end1;
inorder1(root);cout<<end1;
cout<<“后序遍历的结果”<<end1;
postorder1(root);cout<<end1;
}


## 6、快速排序.c



/***********************************************************
我的信息: *
编程ID
***********************************************************/
#include<stdio.h>
void quicksort(int a[],int start,int end)
{
int i,j;
int mid;
if(start>=end)
return;
i=start;
j=end;
mid=a[i];
while(i<j)
{
while(i<j&&a[j]>mid)
j–;
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j&&a[i]<=mid)
i++;
if(i<j)
{
a[j]=a[i];
j–;
}
}
a[i]=mid;
quicksort(a,start,i-1);
quicksort(a,i+1,end);
}
void scan(int a[],int n)
{
int i;
for(i=1;i<=n;i++)
{
scanf(“%d”,&a[i]);
}
}
void print(int a[],int n)
{
int i;
for(i=1;i<=n;i++)
{
printf(“%5d”,a[i]);
}
}
void main()
{
int a[1000];
int s;
int start=1,end;
printf(“输入数组长度:”);
scanf(“%d”,&s);
end=s;
scan(a,s);
quicksort(a,start,end);
print(a,s);
}


## 7、括号匹配.c



/***********************************************************
我的信息: *
编程ID
***********************************************************/
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
struct node
{
char date;
struct node *next;
};
struct node *top;
void push (char x)
{
struct node *p;
p=(struct node *)malloc(sizeof(struct node));
p->date=x;
p->next=top;

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

lude<conio.h>
struct node
{
char date;
struct node *next;
};
struct node *top;
void push (char x)
{
struct node *p;
p=(struct node *)malloc(sizeof(struct node));
p->date=x;
p->next=top;

[外链图片转存中…(img-tdzItLnI-1715499200209)]
[外链图片转存中…(img-UaKvskTu-1715499200210)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CAI之二叉树创建及非递归遍历图形演示 这我的课程设计,我是安徽新华学院的一位喜欢编程的初学者,花了一周的时间写完的,在tc2.0下编译运行通过了 有好的意见的话很乐意你加我317837044                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
1、某软件公司大约有30名员工,每名员工有姓名、工号、职务等属性,每年都有员工离职和入职。 把所有员工按照顺序存储结构建立一个线性表,建立离职和入职函数,当有员工离职或入职时,修改线性表,并且打印最新的员工名单。 2、约瑟夫(Josephus)环问题:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部出列为止。 建立n个人的单循环链表存储结构,运行结束后,输出依次出队的人的序号。 3、某商场有一个100个车位的停车场,当车位未满时,等待的车辆可以进入并计时;当车位已满时,必须有车辆离开,等待的车辆才能进入;当车辆离开时计算停留的的时间,并且按照每小时1元收费。 汽车的输入信息格式可以是(进入/离开,车牌号,进入/离开时间),要求可以随时显示停车场内的车辆信息以及收费历史记录。 4、某银行营业厅共有6个营业窗口,设有排队系统广播叫号,该银行的业务分为公积金、银行卡、理财卡等三种。公积金业务指定1号窗口,银行卡业务指定2、3、4号窗口,理财卡业务指定5、6号窗口。但如果5、6号窗口全忙,而2、3、4号窗口有空闲时,理财卡业务也可以在空闲的2、3、4号窗口之一办理。 客户领号、业务完成可以作为输入信息,要求可以随时显示6个营业窗口的状态。
好的,让我来简单介绍一下二叉排序树的概念和实现思路。 二叉排序树又称为二叉搜索树,是一种特殊的二叉树,它满足以下条件: 1. 对于任意结点,它的左子树中的所有结点的值都小于它的值; 2. 对于任意结点,它的右子树中的所有结点的值都大于它的值; 3. 左右子树都是二叉排序树。 根据这个定义,我们可以用二叉链表来实现一棵二叉排序树。具体实现思路如下: 1. 定义二叉树的结点类型,包括结点的值、左右子结点指针; 2. 定义一个函数,用于向二叉排序树中插入一个结点; 3. 读入一组序列,依次插入到二叉排序树中; 4. 中序遍历整棵二叉排序树,输出结点的值。 下面是具体的代码实现,你可以参考一下: ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树结点类型 typedef struct node { int value; struct node* left; struct node* right; } Node; // 向二叉排序树中插入一个结点 Node* insert(Node* root, int value) { if (root == NULL) { // 如果当前结点为空,就创建一个新的结点 Node* node = (Node*)malloc(sizeof(Node)); node->value = value; node->left = NULL; node->right = NULL; return node; } else if (value < root->value) { // 如果插入的值小于当前结点的值,就插入到左子树中 root->left = insert(root->left, value); } else { // 如果插入的值大于等于当前结点的值,就插入到右子树中 root->right = insert(root->right, value); } return root; } // 中序遍历二叉排序树 void inorder(Node* root) { if (root == NULL) { return; } inorder(root->left); printf("%d ", root->value); inorder(root->right); } int main() { // 读入一组序列,依次插入到二叉排序树中 int n, value; scanf("%d", &n); Node* root = NULL; for (int i = 0; i < n; i++) { scanf("%d", &value); root = insert(root, value); } // 中序遍历整棵二叉排序树,输出结点的值 inorder(root); return 0; } ``` 这样就完成了二叉排序树的建立和中序遍历。当然,这只是一个简单的实现,如果你想进一步了解二叉排序树的相关知识,可以参考一些经典的算法教材。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值