栈 属于先进后出的
数据结构。一种特殊的线性表,始终在栈顶进行。 不能遍历(只有栈顶元素被外界访问到) 栈的顺序存储(数组)和栈的链式存储(链表)。 顺序结构 #d...、概念:链表是一种
物理存储
结构上非连续、非顺序的存储
结构,
数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。 实际中链表的
结构非常多样,以下情况组合起来就有8种链表
结构:1...、(1)正确性。在合理的
数据输入下,能够在有限的运行时间内得到正确的结果。 (2) 可读性。一个好的
算法,首先应便千人们理解和相互交流 , 其次才是机器可执行性。可 读性强的
算法有助于...、【1,1,1】
数据结构形式地定义为(D,S),其中D是①的有限集合,S是D上的②的有限集合。 ① A.
算法 B. 数据元素
C. 逻辑结构 D. 数据操作 ② A. 结构 B. 操作
C. 存储 D. 关系 【2,1,1...、C++是基本兼容
C的,所以你看到的教程里用
C实现的
算法与数据结构,基本都能用C++实现,而且有些时候C++...、
数据结构研究的是数据的存储方式,
算法研究的是解决问题的思路。
数据结构与
算法是相辅相成的,所以本教程把它们融合在一起讲解。 阅读本教程需要具备
C语言基础,不了解
C语言的读...、分类:
烦恼 >> 校园
生活 问题描述: 1 建立一棵二叉树,其结点的
数据类型为
结构体(包括姓名 年龄
职业);对该二叉树分别进行先序 中序和后序遍历并输出遍历结果 2...、
数据结构的教材里面的程序多半是类
C语言程序,是不能上机运行的。下面我给出一个例子,是实现单链表的基本操作,包括类型定义,功能函数,MAIN函数,这个程序是完全...、
数据结构算法题(用
C语言):实现函数int Delete(sqlist L,double x),函 - ___ // 既然是顺序表,肯定有个length变量和数组data,你没有给具体的结构体,我就暂用这两/// 名称int D...、
这个我不懂,但我看到了这样一段代码,不知道缓游行不行
说明:
//和/* */都是注释的,
//是单行注释
/* */是多行注释,
用哪个都行
排序是按节点中的年龄来排.
---------------下面是程序代码-----------------
#include <stdio.h>
#include <string.h>
struct stutree
{
struct stutree *left; //存放左子树的指针
char name[20]; //姓名
int age; //年龄
char job[30]; //职业
struct stutree *right;//存放右子树的指针
};
typedef struct stutree treenode; //生命新类型树结构
typedef treenode *s_tree; //声名腔哪锋二叉树的链表
//输入二叉树的节点
s_tree insert_node(s_tree root,int node)
{
s_tree newnode; //声名树根结点
s_tree currentnode; //声名目前节点指针
s_tree parentnode; //声名父节点指针
//建立新节点的内存空间
newnode=(s_tree) malloc (sizeof(treenode));
newnode->name=name; //存入节伍晌点姓名
newnode->age=age; //存入节点年龄
newnode->job=job; //存入节点职业
newnode->left=NULL; //设置左指针初值
newnode->right=NULL; //设置右指针初值
if(root==NULL)
return newnode; //返回新节点的位置
else
{
currentnode=root; //存储目前节点的指针
while(currentnode!=NULL)
{
parentnode=currentnode; //存储父节点指针
if(currentnode->age>age) //比较节点的数值大小(只能按年龄)
currentnode=currentnode->left;//左子树
else
currentnode=currentnode->right;//右子树
}
if (parentnode->age>age)//将父节点和子节点做连结
parentnode->left=newnode;//子节点为父节点之左子树
else
parentnode->right=newnode;//子节点为父节点之右子树
}
return root;//返回根节点之指针
}
//建立二叉树
s_tree create_stree(int *age,int len)
{
s_tree root=NULL;
int i;
for(i=0;i<len;i++)
root=insert_node(root,age[i]);
return root;
}
//二叉树前序遍历
viod preorder(s_tree point)
{
if (point!=NULL)
{
print("%c,%d,%c\n",point->name,point->age,point->job);
preorder(point-left);
preorder(point-right);
}
}
//二叉树中序遍历
viod inorder(s_tree point)
{
if (point!=NULL)
{
inorder(point-left);
print("%c,%d,%c\n",point->name,point->age,point->job);
inorder(point-right);
}
}
//二叉树后序遍历
viod postorder(s_tree point)
{
if (point!=NULL)
{
postorder(point-left);
postorder(point-right);
print("%c,%d,%c\n",point->name,point->age,point->job);
}
}
//主程序建立二叉树,以前序,中序,后序遍历输出二叉树节点内容
void main()
{
s_tree root=NULL; //树根节点
int index;
char name[20];//读入输入值姓名所使用的暂存变量
int age; //读入输入值年龄所使用的暂存变量
char job[30]; //读入输入值职业所使用的暂存变量
int namelist[20]; //声明存储输入数据的数组
int agelist[20];
int joblist[20];
printf("\n Please input the information of students tree(Exit for 0):\n");
index=0;
//读取数值存到数组中
printf("Please input the name of student:");
scanf("%c",name);
printf("Please input the age of student:");
scanf("%d",age);
printf("Please input the job of student:");
scanf("%c",job);
while(name!=0&&age!=0&&job!=0)
{
namelist[index]=name;
agelist[index]=age;
joblist[index]=job;
index=index+1;
printf("Please input the name of student:");
scanf("%c",name);
printf("Please input the age of student:");
scanf("%d",age);
printf("Please input the job of student:");
scanf("%c",job);
}
//建立二叉树
root=create_stree(agelist,index);
printf("\nThe preorder traversal resule is :");
preorder(root);
printf("\nThe inorder traversal resule is :");
inorder(root);
printf("\nThe postorder traversal resule is :");
postorder(root);
}
刚刚写了一个,看看行不行,是第一题的.
我是一次性写下来的,没检查,楼主要注意一下,可能有不当的地方.自行调整吧.
还有,我看有人写第二题的了,就不写了
说明:
//和/* */都是注释的,
//是单行注释
/* */是多行注释,
用哪个都行
排序是按节点中的罩芦年龄来排.
---------------下面是程序代码-----------------
#include <stdio.h>
#include <string.h>
struct stutree
{
struct stutree *left; //存放左子树的指针
char name[20]; //姓名
int age; //年龄
char job[30]; //职业
struct stutree *right;//存放右子树的指针
};
typedef struct stutree treenode; //生命新类型树结构
typedef treenode *s_tree; //声名二叉树的链表
//输入二叉树的节点
s_tree insert_node(s_tree root,int node)
{
s_tree newnode; //声名树根结点
s_tree currentnode; //声名目前节点指针
s_tree parentnode; //声名贺闷告父节点指针
//建立新节点的内存空间
newnode=(s_tree) malloc (sizeof(treenode));
newnode->name=name; //存入节点姓名
newnode->age=age; //存入节点年龄
newnode->job=job; //存入节点职业
newnode->left=NULL; //设置左指针初值
newnode->right=NULL; //设置右指针初值
if(root==NULL)
return newnode; //返回新节点的位置
else
{
currentnode=root; //存储目前节点的指针
while(currentnode!=NULL)
{
parentnode=currentnode; //存储父节点指针
if(currentnode->age>age) //比较节点的数值大小(只能按年龄)
currentnode=currentnode->left;//左子树
else
currentnode=currentnode->right;//右子树
}
if (parentnode->age>age)//将父节点和子节点做连结
parentnode->left=newnode;//禅明子节点为父节点之左子树
else
parentnode->right=newnode;//子节点为父节点之右子树
}
return root;//返回根节点之指针
}
//建立二叉树
s_tree create_stree(int *age,int len)
{
s_tree root=NULL;
int i;
for(i=0;i<len;i++)
root=insert_node(root,age[i]);
return root;
}
//二叉树前序遍历
viod preorder(s_tree point)
{
if (point!=NULL)
{
print("%c,%d,%c\n",point->name,point->age,point->job);
preorder(point-left);
preorder(point-right);
}
}
//二叉树中序遍历
viod inorder(s_tree point)
{
if (point!=NULL)
{
inorder(point-left);
print("%c,%d,%c\n",point->name,point->age,point->job);
inorder(point-right);
}
}
//二叉树后序遍历
viod postorder(s_tree point)
{
if (point!=NULL)
{
postorder(point-left);
postorder(point-right);
print("%c,%d,%c\n",point->name,point->age,point->job);
}
}
//主程序建立二叉树,以前序,中序,后序遍历输出二叉树节点内容
void main()
{
s_tree root=NULL; //树根节点
int index;
char name[20];//读入输入值姓名所使用的暂存变量
int age; //读入输入值年龄所使用的暂存变量
char job[30]; //读入输入值职业所使用的暂存变量
int namelist[20]; //声明存储输入数据的数组
int agelist[20];
int joblist[20];
printf("\n Please input the information of students tree(Exit for 0):\n");
index=0;
//读取数值存到数组中
printf("Please input the name of student:");
scanf("%c",name);
printf("Please input the age of student:");
scanf("%d",age);
printf("Please input the job of student:");
scanf("%c",job);
while(name!=0&&age!=0&&job!=0)
{
namelist[index]=name;
agelist[index]=age;
joblist[index]=job;
index=index+1;
printf("Please input the name of student:");
scanf("%c",name);
printf("Please input the age of student:");
scanf("%d",age);
printf("Please input the job of student:");
scanf("%c",job);
}
//建立二叉树
root=create_stree(agelist,index);
printf("\nThe preorder traversal resule is :");
preorder(root);
printf("\nThe inorder traversal resule is :");
inorder(root);
printf("\nThe postorder traversal resule is :");
postorder(root);
}
xiaotao555定义的结构还真牛B,你知道你这个结构定义出来是不能用的吗?C语言里面结构定义在大括号后是要加上类型名称的,前面struct后面的student可什么都不是,可以省略的。
这也不源贺丛是C++,注释可不是这样的。/*应该是这样*/
还有你怎么不写复杂读分拍厅析啊,这可是很难的。
你的代码除了定义结构外,丝毫没用数据结构的东西。
三种遍历法都不知道,是不是从来没上过数据结构的雹樱课。
有空我帮楼主想想吧,你这个算是什么课程?如果是课程设计好象也太早了吧。
qq312683660
easy~~
答案给你发过去
网上到处都陵隐禅 有 ,只是要尺尘给钱的。
肯定是舍不得花前去卖吧,
就200分 也想要 c语言程序,
要求还这么复杂,郁携兄闷。