三九宝宝网宝宝教育教学论文

c语言版数据结构问题

03月07日 编辑 39baobao.com

[c语言数据结构中结构体定义问题]编译器逐行解析,在定义next之前,编译器已经知道struct student这个结构类型的存在,所以可以用它来定义next。 next是指向struct student结构的指针类型。一般像这种用法,都是用...+阅读

#include typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; } BiTNode,*BiTree;//定义结点类型 BiTree CreateBiTree()//创建树 { char p;BiTree T; scanf("%c",&p); if(p==' ') T=NULL; else { T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间 T->data=p; T->lchild=CreateBiTree(); T->rchild=CreateBiTree(); } return (T); } void InOrder(BiTree T)//中序 { if(T!=NULL) { InOrder(T->lchild); printf("%c",T->data); InOrder(T->rchild); } } void PostOrder(BiTree T)//后序 { if(T!=NULL) { PostOrder(T->lchild); PostOrder(T->rchild); printf("%c",T->data); } } int Nochild(BiTree T)//叶子结点 { int num1,num2; if(T==NULL) return(0); if(T->lchild==NULL&&T->rchild==NULL) return(1); num1=Nochild(T->lchild); num2=Nochild(T->rchild); return(num2+num1); } int Depth(BiTree T)/* 深度 */ { if(T==NULL) return(0); else return 1+(Depth(T->lchild)>Depth(T->rchild)? Depth(T->lchild):Depth(T->rchild)); } void Distroy(BiTree& T)//销毁 { if(T!=NULL) { BiTree L,R; L=T->lchild; R=T->rchild; printf("%c销毁成功!\n",T->data); free(T); T=NULL; Distroy(L); Distroy(R); } } void main()//主函数 { BiTree Ta; int num; Ta=CreateBiTree(); printf("中序遍历:"); printf("\n"); InOrder(Ta); printf("\n"); printf("后序遍历:"); printf("\n"); PostOrder(Ta); printf("\n"); num=Nochild(Ta); printf("叶子数为:%d\n",num); printf("深度为:%d\n",Depth(Ta)); Distroy(Ta); printf("销毁后深度为:%d\n",Depth(Ta)); } 花了一点时间帮你编出来了,也让我复习了一下《数据结构》。是用递归编的。

没考虑到你可能用纯c编译器

如果是的话销毁函数改一下

void Distroy(BiTree *T)//销毁 { if((*T)!=NULL) { BiTree L,R; L=(*T)->lchild; R=(*T)->rchild; printf("%c销毁成功!\n",(*T)->data); free(*T); (*T)=NULL; Distroy(&L); Distroy(&R); } }

主函数中改为

Distroy(&Ta);

如果是VC6.0的话两者编译都没问题。

数据结构c版

int LocateElem(LinkList *L,ElemType e)

{

LinkList *p=L->next;

int i=1;

while (p!=NULL & p->data!=e)

{

p=p->next;

i++;

}

if(p==NULL)

return(0);

else

return(i);

}

int ListInsert(LinkList *&L,int i, ElemType e)

{

int j=0;

LinkList *p=L,*s;

while(j

{

j++;

p=p->next;

}

if(p==NULL)

return 0;

else

{

s=(LinkList *)malloc(sizeof(LinkList));

s->data=e;

s->next=p->next;

p->next=s;

return 1;

}

}

数据结构C版和数据结构C版有什么大的区别吗

C++的数据结构一般都是提供模版的,而且在重装运算符方面做得比较出色,一般都是用类模版做数据结构,实现一个模版之后,基本上可以与很多数据类型通用.

C在这方面完全没有优势,在做数据结构前,通常先定义自己的类型,如typedef int elemtype,之后再定义数据结构,定义完数据结构后,在实现算法这方面,你实现了算法,但回过头来看看,你的算法只介定于已经定义的数据结构,即你的算法能够对你已经成为定义的数据结构里的的int(elemtype)起作用,但是,当你想把数据结构里的elemtype改为char时,你会发现原先写的算法很难运行得了.不过这个一般也不成什么问题,只是每次你想用到的数据结构时,数据结构里的数据类型不同时,你必须重新将算法再做一遍,以确保不会出错.

两者的比较,C++虽提供类模版,但存在着不确定性,因为你不确定你先前写的那个模版是否通用,这是对于中低手而言,高手一般不存在这样的问题.可以参考标准模版库STL.这里面有很多模版,而且不管是你自己定义的类型,还是编译器里已经存在的类型,都能够通用,是一个强大的工具.

对于C来说,虽然没有这方面的优势,但一个算法出来,绝对是针对某一个类型的,也就是说它具有针对性,或者说确定性.

至于两者用不用都学,这要看个人喜好了,如果你喜欢C++,想深入学习的话,C++版的数据结构不学是不行的,对于C来说也是同样的.

就我而言,我刚开始是学C的,后来转学C++,之后又回过头来学C数据结构,又转学C++数据结构.对于C来说,我觉得算法很容易写,而对于C++,有时我会拿不定主意怎么写出一个通用的算法.以上都是个人见解,至于你能明白多少,那就得看你自己了!

以下为关联文档:

c语言数据结构#include #include struct chain { int value; struct chain *next; }; struct chain *create() { struct chain *head,*tail,*p; int x; head = tail = NULL; while(scanf(...

C语言数据结构与算法分析C语言描述Position不是一个类型,起码C语言中,我写那么多年代码没见过这个类型 。你该把整段代码贴上来。我猜你看的那段代码是伪代码,Position是自定义类型。若Position是类名,那么Positi...

c语言数据结构赋值问题你是传值,不是传址。如下修改,能正确得到理想结果: #include<stdio.h> #include<stdlib.h> //void initstack(struct snode*); struct snode { int data[10]; int top; }; main...

c语言中结构的赋值问题p=head和p=head->next有什么区别吗? 这个当然有区别,head的首地址指向的是结构体中的 i 成员变量,也就是head->i的地址。(注意是首地址,而不是等于p=head->i。且p=head->i,等号两...

C语言结构体排序问题由于你只是交换字符串,所以修改如下,请检验。 用strcpy(s1,s2)进行复制字符串,不能直接s1=s2。 #include #include typedef struct { char number[10];//书号 char name[50];//书...

高分求:迷宫问题数据结构C语言这个迷宫的路径不是唯一的,因此从不同方向开始试探执行结果也可能会不唯一。我写的是参考书上的,共有八个方向可以试探。 栈解决迷宫主要的几个问题: 1.迷宫的存储 2.栈的设计...

急!C语言程序数据结构排序算法的问题#include"stdio.h" #include"stdlib.h" #include "string.h" #define Max 100 //假设文件长度 typedef struct{ //定义记录类型 int key; //关键字项 }RecType; typedef RecType Se...

关于严蔚敏C语言数据结构的栈PUSH实现代码ElemType是否是笔误? 这个应该是笔误。。 另外对于追加那个,顺序栈是需要连续地址的内存,打个比方,比如原来栈的容量是从内存地址2000到2100这段空间,现在不够用了,需要增加100,也...

数据结构c语言版严蔚敏的问题:两个有序线性表的交集合并成菜鸟路过。。。 #include#include#define OK 1 #define ERROR 0 typedef struct { int *elem; int length; int listsize; } SqList; int InitList_Sq(SqList *L,int len) {...

推荐阅读
图文推荐