C++所有的实验程序.docx

上传人:b****5 文档编号:7645356 上传时间:2023-01-25 格式:DOCX 页数:27 大小:20.11KB
下载 相关 举报
C++所有的实验程序.docx_第1页
第1页 / 共27页
C++所有的实验程序.docx_第2页
第2页 / 共27页
C++所有的实验程序.docx_第3页
第3页 / 共27页
C++所有的实验程序.docx_第4页
第4页 / 共27页
C++所有的实验程序.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C++所有的实验程序.docx

《C++所有的实验程序.docx》由会员分享,可在线阅读,更多相关《C++所有的实验程序.docx(27页珍藏版)》请在冰豆网上搜索。

C++所有的实验程序.docx

C++所有的实验程序

实验二:

#include

#include

#definemaxlen50

typedefstruct{

intdata[maxlen];

intlast;

}Sequenlist;

Sequenlist*SqLset(){

Sequenlist*L;

inti;

L=(Sequenlist*)malloc(sizeof(Sequenlist));

L->last=-1;

printf("请输入不超过50的表长:

\n");

scanf("%d",&i);

if(i>0){

printf("输入数据:

\n");

for(L->last=0;L->lastlast++)

scanf("%d",&L->data[L->last]);

}

returnL;

}

voidmaxmin(Sequenlist*L){

intmin,max,i;

if(L->last>=0){

max=min=L->data[0];

for(i=1;i<=L->last-1;i++){

if(min>L->data[i])

min=L->data[i];

if(maxdata[i])

max=L->data[i];

}

printf("max=%d,min=%d\n",max,min);

}

}

voidmain(){

Sequenlist*A;

A=SqLset();

maxmin(A);

}

实验三顺序查询:

#include

#include

#defineMax40

typedefstruct{

intdata[Max];

intlast;

}squenlist;

voidresearch(squenlist*L)

{

inti,a,chioce;

do{

printf("0:

退出;\n1:

继续查找;\n");

scanf("%d",&chioce);

if(chioce==1)

{

printf("请输入要查找的元素:

\n");

scanf("%d",&a);

L->data[L->last+1]=a;

for(i=0;i<=L->last+1;i++){

if(L->data[i]==a)

break;

}

if(i==L->last+1){

printf("无该元素,查找失败!

\n");

}

else{

printf("该元素的位置是:

%d",i);

}

printf("\n");

}

if(chioce!

=1&&chioce!

=0)

printf("选择有误,请重新选择!

\n");

}while(chioce!

=0);

}

voidmain(){

squenlist*L;

inti,n;

if((L=(squenlist*)malloc(sizeof(squenlist)))==NULL){

printf("申请失败!

\n");

exit

(1);

}

printf("长度不超过39,请选择长度n:

\n");

scanf("%d",&n);

L->last=n-1;

printf("请输入一组长度为n的递增数:

\n");

for(i=0;i

scanf("%d",&L->data[i]);

while(i>=1){

if(L->data[i-1]>L->data[i]){

printf("输入有误,请重新输入:

\n");

i=-1;

break;

}

elsebreak;

}

}

printf("该顺序表元素是:

\n");

for(i=0;i<=L->last;i++)

printf("%d\t",L->data[i]);

printf("\n");

research(L);

}

实验四奇偶排序:

#include

#include

#defineMAX60

typedefstruct{

intdata[MAX+1];

intlength;

}sqelist;

voidodd(sqelist*L){//奇排序函数;

inti,j;

for(i=0;ilength;i++)

for(j=0;jlength-i-1;j++){

if(L->data[j]%2==1){

if(L->data[j]>L->data[j+1]){

L->data[L->length]=L->data[j+1];

L->data[j+1]=L->data[j];

L->data[j]=L->data[L->length];

}

}

}

}

voideven(sqelist*L){//偶排序函数;

inti,j;

for(i=0;ilength;i++)

for(j=0;jlength-i-1;j++){

if(L->data[j]%2==0){

if(L->data[j]>L->data[j+1]){

L->data[L->length]=L->data[j+1];

L->data[j+1]=L->data[j];

L->data[j]=L->data[L->length];

}

}

}

}

voidbubble(sqelist*L){//奇偶排序调用函数;

inti;

for(i=0;ilength;i++)

if(L->data[i]>L->data[i+1]){

odd(L);

even(L);

}

}

sqelist*input(){//输入;

inti,n;

sqelist*H;

H=(sqelist*)malloc(sizeof(sqelist));

printf("请输入要输入元素的个数:

\n");

scanf("%d",&n);

H->length=n;

printf("请输入%d个元素:

\n",n);

for(i=0;i

scanf("%d",&H->data[i]);

returnH;

}

voidputout(sqelist*L){//输出;

inti;

printf("按奇偶排序后的顺序是:

\n");

for(i=0;ilength;i++)

printf("%d",L->data[i]);

printf("\n");

}

voidmain(){

sqelist*L;

L=input();

bubble(L);

putout(L);

}

实验五-在非递减有序链表中插入元素并且顺序不变

#include

#include

typedefstructnode{

intdata;

structnode*next;

}Linklist;

Linklist*createlist(){//新建链表函数;

Linklist*H,*S,*R,*P;

inti,n,m;

H=(Linklist*)malloc(sizeof(Linklist));

H->next=NULL;

S=H;

printf("请输入新建非空链表的长度:

");

scanf("%d",&n);

H->data=n;//记录新链表长度;

printf("请输入一组长度为%d的递增数:

\n",n);

for(i=0;i

R=(Linklist*)malloc(sizeof(Linklist));

scanf("%d",&m);

R->data=m;

R->next=NULL;

S->next=R;

P=S;

S=R;

while(i>=1){

if(P->data>R->data){

printf("输入有误,请从此处重新输入:

\n");

i--;

P->next=NULL;

S=P;

free(R);

break;

}

elsebreak;

}

}

returnH;

}

voidinsertlist(Linklist*L){//插入元素的值;

Linklist*P,*S,*R;

intn;

printf("请输入要插入元素的值:

");

scanf("%d",&n);

P=L;

while(P!

=NULL){

R=P;

P=P->next;

if(P!

=NULL&&n<=P->data){

S=(Linklist*)malloc(sizeof(Linklist));

S->data=n;

S->next=P;

R->next=S;

break;

}

}

if(P==NULL){

S=(Linklist*)malloc(sizeof(Linklist));

S->data=n;

S->next=NULL;

R->next=S;

}

}

voidputout(Linklist*L){//输出函数;

Linklist*P;

P=L->next;

printf("该链表是:

\n");

while(P!

=NULL){

printf("%d",P->data);

P=P->next;

}

printf("\n");

}

voidmain(){

Linklist*L=NULL;

intn;

do{

printf("0:

退出;1:

新建链表;2:

插入元素;3:

输出链表!

\n请选择:

");

scanf("%d",&n);

switch(n){

case1:

L=createlist();

printf("\n");

break;

case2:

if(L!

=NULL)

insertlist(L);

else

printf("链表为空!

");

printf("\n");

break;

case3:

if(L!

=NULL){

putout(L);

printf("\n");

}

else{

printf("链表为空!

");

printf("\n");

}

break;

default:

break;

}

}while(n!

=0);

printf("\n");

}

实验七(单向循环链表表示队列)

#include

#include

typedefstructnode{

intdata;

structnode*next;

}squelink;

intstempty(squelink*L){//判队空;

squelink*P;

P=L->next;

if(P->data==0)

return0;

else

return1;

}

squelink*setempty(squelink*L){//置空队;

squelink*P,*R,*H;

inti,n;

R=L->next;

H=R->next;

n=R->data;

for(i=0;i

P=H->next;

if(P==L)L=R;

R->next=P;

free(H);

R->data--;

H=P;

}

returnL;

}

squelink*setinput(squelink*L){//入队;

squelink*R,*S;

intn,i=0,l;

l=stempty(L);

if(l==0)

R=L;

else

R=L->next;

printf("请输入队元素的个数:

");

scanf("%d",&n);

if(n>0){

R->data+=n;

printf("输入入队的元素值:

\n");

while(i

S=(squelink*)malloc(sizeof(squelink));

scanf("%d",&S->data);

S->next=R;

L->next=S;

L=S;

i++;

}

}

returnL;

}

squelink*setoutput(squelink*L){//出队;

squelink*P,*R,*H;

intl,i,n;

R=L->next;

P=R->next;

l=stempty(L);

if(l==1){

printf("输入不超过%d的出队元素个数:

",R->data);

scanf("%d",&n);

if(n==R->data)

L=R;

printf("\n");

printf("出队元素是:

");

for(i=0;i

H=P->next;

printf("%d",P->data);

R->next=H;

free(P);

P=H;

R->data--;

if(R->data==0)break;

}

}

else

printf("空队!

");

returnL;

}

voidmain(){

squelink*L;

intn,l;

L=(squelink*)malloc(sizeof(squelink));

L->data=0;

L->next=L;

printf("0:

退出;1:

置空队;2:

判空队;3:

入队;4:

出队;\n请选择:

");

scanf("%d",&n);

while(n!

=0){

switch(n){

case1:

if(L->data==0)

printf("队已为空!

");

else

L=setempty(L);

printf("\n");

break;

case2:

l=stempty(L);

if(l==0)

printf("队为空!

\n");

else

if(l==1)

printf("队非空!

\n");

break;

case3:

L=setinput(L);

printf("\n");

break;

case4:

L=setoutput(L);

printf("\n");

break;

default:

printf("选择有误!

\n");

break;

}

printf("请选择:

");

scanf("%d",&n);

}

}

实验九-二叉树所有左右节点的交换

#include

#include

typedefstructnode{

intdata;

structnode*lchild,*rchild;

}Bitree;

voidouttree(Bitree*H){//先序遍历输出;

if(H){

printf("%d",H->data);

outtree(H->lchild);

outtree(H->rchild);

}

}

voidturnlr(Bitree*L){//左右节点交换;

Bitree*P;

if(L){

P=L->lchild;

L->lchild=L->rchild;

L->rchild=P;

turnlr(L->rchild);

turnlr(L->lchild);

}

}

voidcreatetree(Bitree*H){//建立二叉树;

Bitree*L,*R,*P;

intm,n;

P=H;

printf("输入此节点的值:

");

scanf("%d",&P->data);

printf("以-1表示虚结点,请输入该节点的左右孩子是否为虚结点:

\n");

scanf("%d%d",&m,&n);

if(m!

=-1){

L=(Bitree*)malloc(sizeof(Bitree));

L->lchild=NULL;

L->rchild=NULL;

P->lchild=L;

createtree(L);

}

if(n!

=-1){

R=(Bitree*)malloc(sizeof(Bitree));

R->lchild=NULL;

R->rchild=NULL;

P->rchild=R;

createtree(R);

}

}

voidmain(){//主函数;

Bitree*L;

intn;

L=NULL;

printf("0:

退出;\n1:

建立一个二叉树;\n2:

转换所有节点的左右子树;\n3:

二叉树先序遍历后的结果;\n");

printf("请选择:

");

scanf("%d",&n);

while(n){

switch(n){

case1:

Bitree*H;

H=(Bitree*)malloc(sizeof(Bitree));

H->lchild=NULL;

H->rchild=NULL;

createtree(H);

L=H;

break;

case2:

if(L==NULL)

printf("二叉树未被建立!

\n");

else

turnlr(L);

break;

case3:

if(L==NULL)

printf("二叉树未被建立!

\n");

else{

outtree(L);

printf("\n");

}

break;

}

printf("请选择:

");

scanf("%d",&n);

}

}

实验十(二叉排序树的判断)

#include

#include

typedefstructnode{

intdata;

structnode*lchild,*rchild;

}Bstnode;

voidcreatetree(Bstnode*H){//建立二叉树;

Bstnode*L,*R,*P;

intm,n;

P=H;

printf("输入此节点的值:

");

scanf("%d",&P->data);

printf("以-1表示虚结点,请输入该节点的左右孩子是否为虚结点:

\n");

scanf("%d%d",&m,&n);

if(m!

=-1){

L=(Bstnode*)malloc(sizeof(Bstnode));

L->lchild=NULL;

L->rchild=NULL;

P->lchild=L;

createtree(L);

}

if(n!

=-1){

R=(Bstnode*)malloc(sizeof(Bstnode));

R->lchild=NULL;

R->rchild=NULL;

P->rchild=R;

createtree(R);

}

}

intjudgetree(Bstnode*H){//判断是否为二叉排序树;

Bstnode*L,*R;

intflag1=0,flag2=0,flag;//0表示该二叉树是二叉排序树;

if(H){

L=H->lchild;

R=H->rchild;

if(L){

if(L->data>=H->data)

flag1=1;//不是二叉排序树时将flag值改变为1;

elseflag1=judgetree(L);

}

if(R){

if(R->data<=H->data)

flag2=1;//不是二叉排序树时将flag值改变为1;

elseflag2=judgetree(R);

}

}

flag=(flag1>flag2)?

flag1:

flag2;

returnflag;

}

voidmain(){

Bstnode*L;

intn,m;

L=NULL;

printf("0:

退出;1:

建立二叉树;2:

判断二叉树是否是二叉排序树;\n");

scanf("%d",&n);

while(n){

switch(n){

case1:

Bstnode*H;

H=(Bstnode*)malloc(sizeof(Bstnode));

H->lchild=NULL;

H->rchild=NULL;

createtree(H);

L=H;

break;

case2:

if(L==NULL)

printf("空二叉树!

\n");

else{

m=judgetree(L);

if(m==0)

printf("该二叉树是二叉排序树!

\n");

else

printf("该二叉树不是二叉排序树!

\n");

}

break;

}

scanf("%d",&n);

}

}

实验十一(带权值边的无向图邻接矩阵转化成邻接表)

#include

#include

#defineMax100

//定义邻接矩阵类型;

typedefstruct{

intnum;//顶点序号;

intdata;//顶点值;

}Vertex;

typedefstruct{

intn

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1