#include "stdio.h"
#include "ctype.h"
#include "malloc.h"
#include "stdlib.h"
#define M 100
#define ZERO 0
#define SUCC 1
#define DEFT 0
#define MIN -1
#define MAX 2001
typedef int valuetype;
typedef struct Bnode
{
valuetype data;
int layer ;
struct Bnode *Lson,*Rson;
}Bnode,*Bptr;
void writeT(Bptr root)
{
int first=0,last=1;
Bptr p,q[M];
if(root->data==MIN)p=root->Rson;
else p=root->Lson;
if(p==NULL)
{ printf(" 当前二叉树为空,没有结点。\n");return;}
printf(" 当前二叉树的结点为:\n");
printf(" 层号 当前结点 左儿子 右儿子\n");
p->layer=1;
q[0]=p;
while(first!=last)
{
p=q[first++];
printf("%6d%10d ",p->layer,p->data);
if(p->Lson==NULL)printf("%12c",'\040');
else
{
printf("%12d",p->Lson->data);
p->Lson->layer=p->layer+1;
q[last++]=p->Lson;
}
if(p->Rson!=NULL)
{
printf("%12d",p->Rson->data);
p->Rson->layer=p->layer+1;
q[last++]=p->Rson;
}
printf("\n");
}
}
void inorder(Bptr p)
{
if(!p)return;
inorder(p->Lson);
printf("%5d",p->data);
inorder(p->Rson);
}
void sortT(Bptr root)
{
if(root->data==MIN) inorder(root->Rson);
else inorder(root->Rson);
printf("\n");
}
Bptr search (valuetype x,Bptr p)
{
while (p!=NULL)
{
if(x==p->data)return p;
if(x<p->data) p=p->Lson;
else p=p->Rson;
}
return NULL;
}
void searchT(Bptr root)
{
int x;
printf("请输入要查找的结点值x>0,x=");
scanf("%d",&x);
if(search(x,root)==NULL)printf("数中没有%d!\n",x);
else printf("%d 已经找到!\n",x);
}
void insert(valuetype x,Bptr &root)
{
Bptr f,p;
f=NULL;p=root;
while(p!=NULL)
{
if(x<p->data)f=p,p=p->Lson;
else f=p,p=p->Rson;
}
p=new Bnode;
p->data=x;p->Lson=p->Rson=NULL;
if(f==NULL)root=p;
else
if(x<=f->data)f->Lson=p;
else f->Rson=p;
}
void insertT(Bptr p)
{
int x;
printf("请输入要插入的结点的值x>0,x=");
scanf("%d",&x);
insert(x,p);
printf("%d已经被插入了\n",x);
}
Bptr creatST()
{
Bptr root ;valuetype x;
root =NULL;
printf(" 构造初始检索树,请输入元素序列,元素个数不得超过%d,要求:\n",M);
printf("序列以%d或%d开始,以0结束,元素值均为小于%d的正整数\n",MIN,MAX,MAX);
scanf("%d",&x);
while(x!=ZERO)
{
insert(x,root);
scanf("%d",&x);
}
return root;
}
int deleteST(valuetype x,Bptr root)
{
Bptr f,p,s,r;
for (p=root;;)
{
if(p==NULL)return DEFT;
if (x==p->data)break;
if(x<p->data)
{
f=p;p=p->Rson;
}
else
{
f=p;p=p->Rson;
}
}
if (p->Rson==NULL)
{
if(p==f->Lson)
f->Lson=p->Rson;
else
f->Rson=p->Lson;
free (p);
return SUCC;
}
s=p->Lson;
if (s->Rson==NULL)
{
p->data=s->data;
p->Lson=s->Lson;
free (s);
return SUCC;
}
r=s->Rson;
while (r->Rson!=NULL)
{
s=r;
r=r->Rson;
}
p->data=r->data;
s->Rson=r->Lson;
free (r);
return SUCC;
}
void deleteT(Bptr root)
{
int x;
printf("请输入要删除的结点值x>0,x=");
scanf("%d",&x);
if(deleteST(x,root))
printf("%d 已经被删除!\n",x);
else
printf(" %d不在树中,无法删除!\n",x);
}
char getalpha()
{
char c;
while(1)
{
c=getchar();
if(isalpha(c))
return c;
}
}
void treeT(Bptr root)
{
char c;
printf(" 对检索树可以进行下列操作:\n");
while (1)
{
printf("请输入操作码:查找F/f 插入I/i 删除D/d 显示P/p 结点排序S/s 终止E/e\nC=");
c=getalpha();
switch(c)
{
case 'f':
case 'F': searchT(root);break;
case 'p':
case 'P': writeT(root);break;
case 'i':
case 'I': insertT(root);break;
case 'd':
case 'D': deleteT(root);break;
case 's':
case 'S': sortT(root);break;
case 'e':
case 'E': writeT(root);return;
default:printf("输入的操作码不正确,请重新输入!\n");
continue;
}
}
}
void main()
{
Bptr root;
root=creatST();
treeT(root);
printf("程序结束,再见!\n");
}
温馨提示:内容为网友见解,仅供参考
较复杂的c语言程序设计源代码
void Color(int a) \/\/设定颜色的函数(a应为1-15){ SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), a ); } void yinc(int x=1,int y=0) \/\/隐藏光标的函数 { CONSOLE_CURSOR_INFO gb={x,y}; \/\/y设为0即隐藏 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),...
c语言求高手解答,让程序要求用户输入一个大写字母,使用嵌套循环产生下 ...
\/\/第一重循环 :控制行的数量 for(;i<=c;i++) { \/\/第二重循环1:控制顺序输出ABC(即前n位字母) for(j=65;j<=i;j++) printf("%c",j); \/\/第二重循环2:控制逆序输出BA(即后n-1位字母) for(j=i-1;j>=65;j--) printf("%c",j)...
求一个用c语言编程的一个程序。让输出一1000以内的全部素数
此程序可按照以下流程:1、主函数中进行循环,从2到1000 2、如果当前循环的数是素数,就将其输出 判断一个数num是否是素数,可按照以下流程:1、循环,从2到num-1 2、如果当前循环的数能被num整除,则num不是素数 3、没有num能整除的数,表明num是素数 代码如下:include <stdio.h> int isPrime...
求解释一个C语言程序
include <stdio.h>#include <string.h>int ans[10];int m, n;void DFS(int d, int p) \/\/ 需要第d个数,按顺序 从 p + 1 到 m 中选择{ int i; if (d == n) { \/\/ 如果已选出 n 个数,就输出 for (i = 0; i < n; i++) printf("%d ", ans[i]); ...
(急)求帮忙写一个C语言程序,大体就是计算一句话中各字母出现的次数,并...
printf("C : 清除以前读过句子的字母数。\\n");printf("R : 读取一句话。\\n");printf("p : 输出各个字母出现次数。\\n");printf("Q : 退出程序。\\n\\n");printf("输入命令: C、R、P 或 Q : ");fflush(stdin);an = getchar();switch(an) { case 'c' :case 'C' : for(i =...
用c语言编一个程序 要求1:输入一个年份,输出是在屏幕上显示该年的日历...
return(mon_day[month-1]);} int DaySearch(int year,int month,int day) \/*这个函数是计算输入的日期对应的星期*\/ { int c=0;float s;int m;for(m=1;m<month;m++)c=c+month_day(year,m); \/\/这是计算输入的月分的累计天数 c=c+day; \/\/计算日期在这一年中是第几天 s=year-1...
C语言编写一个程序求出1+2+3……1000
include<stdio.h>int main(){ int i, sum = 0; for(i = 1; i <= 1000; i++) { sum += i; } printf("结果为:%d", sum); return 0;}书写的时候注意一些规范,包括语句的对齐,一些特定位置的空格使用,初学编程,养成良好的编码习惯很重要 ...
急求急急急急急求,急求用C语言编写一个计算器程序,代码量为三百行左右...
printf ("error: no variable name\\n"); break; case 'c':clear(); break; case 'd': \/\/复制栈顶元素 op2 = pop();push(op2);push(op2); break; case 's': \/\/交换栈元素 op1 = pop();op2 = pop();push(op1);push(op2); case '\\n':v = pop(...
帮我写一个c语言的程序,按照我下面的思路写下哦
一个完整的c程序如下,win-tc和Dev-c++下已运行通过。include <stdio.h> include <string.h> include <conio.h> char c_je[51]; \/*大写金额字符变量*\/ char* zh( x ) \/*数字金额转换为大写金额子程序*\/ double x; \/*要转换的金额数*\/ { int i, n, bz;char je[14]; ...
求一个C语言程序,关于求和和函数调用的
include<stdio.h> int sum(int n){ int i=0,s=0;while(i<=n){ s=s+i;i++;} return s;} int main(){ int n;printf("请输入要累积的数:");scanf("%d",&n);sum(n);printf("累加的结果为%d",sum(n));return 0;} ...