链表、二叉树、图的建立与初始化C源代码
注:为了省去输入的麻烦,以下程序所用数据均从文件读取
1、链表建立与初始化
建立如下链表
建立一个名为data的txt文件,将此文件放在本程序所在文件夹目录下,文件内容为:
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{int data;struct LNode *next;
} LNode;void Print(LNode *L)///输出函数
{LNode *p;p=L;while((p->next)!=NULL){printf("%d ",p->next->data);p = p->next;}
}///建立链表及初始化
LNode *CreatL()
{LNode *L = (LNode *)malloc(sizeof(LNode)); //申请头结点空间L->next = NULL; //初始化一个空链表LNode *r;r = L; //r始终指向终端结点,开始时指向头结点int x; //x为链表数据域中的数据FILE *fp;fp=fopen("data.txt","r");while((fscanf(fp,"%d",&x))!=EOF){LNode *p;p = (LNode *)malloc(sizeof(LNode)); //申请新的结点p->data = x; //结点数据域赋值r->next =p;r = p; //将结点插入到表头L-->|1|-->|2|-->NULL}fclose(fp);r->next=NULL;return L;
}
void delet(LNode *L,int i)
{LNode *p=L;int count=0;//找到第i个结点的前一个位置pwhile(p->next){count++;if(count==i){break;}p=p->next;}LNode *q=p->next;p->next=p->next->next;free(q);
}int main()
{LNode *L;printf("建立链表:");L=CreatL();//建立链表与初始化Print(L);//打印链表delet(L,3);printf("\n删除第三个元素后链表:");Print(L);//打印链表return 0;
}
/*建立一个名为data的txt文件,将此文件放在本程序所在文件夹目录下
文件内容:
1
2
3
4
5
6
*/
2、二叉树的建立与初始化
下面创建如下图所示二叉树并给出前序遍历调用方法
建立一个名为data的txt文件,将此文件放在本程序所在文件夹目录下,文件内容为:
#include <stdlib.h>
#include <stdio.h>
#define maxsize 100
// 定义结点类型
typedef struct btnode
{int data;struct btnode *lchild,*rchild;
} btnode;
FILE *fp;///使用文件读取数据//二叉树
btnode* creat_bitree()
{int a;fscanf(fp,"%d",&a);btnode *node=NULL;if(a!=0){node=(btnode *)malloc(sizeof(btnode));node->data=a;node->lchild =creat_bitree();node->rchild =creat_bitree();}return node;
}//前序遍历
void pre (btnode *bt)
{if(bt){printf("%d ",bt->data);pre(bt->lchild);pre(bt->rchild);}}
int main()
{fp=fopen("data.txt","r");btnode *bt=creat_bitree();printf("\n前序遍历:\n");pre(bt);
}/*建立一个名为data的txt文件,将此文件放在本程序所在文件夹目录下
文件内容(按照二叉树前序序列,0表示空指针域):
55
10
7
3
0
0
0
22
0
0
666
0
1000
0
0
*/
3、有向图图的建立与初始化
建立如下有向图(如何建立无向图代码中有提示)
建立一个名为data的txt文件,将此文件放在本程序所在文件夹目录下,文件内容为:
#include <stdio.h>
#include<stdlib.h>
#define DEBUG
#define MAXVEX 100 //最大顶点数
int count=0;
typedef struct ArcNode//边表结点
{int adjvex;//邻接点域,存储该顶点对应的下标int weight;//用于存储权值,对于非网图可以不需要struct ArcNode *nextarc; //链域,指向下一个邻接点
} ArcNode;
typedef struct VNode//顶点表结点
{int data;//顶点域,存储顶点信息ArcNode *firstarc;//边表头指针
} VNode;
typedef struct Graph
{VNode adjList[MAXVEX];int numNodes, numEdges; // 图中当前顶点数和边数
} Graph;//图的建立与初始化
Graph *CreateALGraph(Graph *G)
{G=(Graph *)malloc(sizeof(Graph));printf("进入:\n");int i, j, k;ArcNode *pe;FILE *fp;fp=fopen("data.txt","r");fscanf(fp,"%d %d",&(G->numNodes),&(G->numEdges));//printf("进入:\n");printf("顶点数与边数:%d %d\n",G->numNodes,G->numEdges);for (i = 0 ; i < G->numNodes; i++){G->adjList[i].firstarc = NULL;//将边表置为空表}for (k = 0; k < G->numEdges; k++)//建立边表{fscanf(fp,"%d %d",&i,&j);printf("已初始化输入边(%d,%d)\n",i,j);pe = (ArcNode*)malloc(sizeof(ArcNode));pe->adjvex = j;//邻接序号为j
//将pe的指针指向当前顶点上指向的结点pe->nextarc =G->adjList[i].firstarc;G->adjList[i].firstarc = pe;//将当前顶点的指针指向pe/*如果是无向图则再添加如下代码pe = (ArcNode*)malloc(sizeof(ArcNode));pe->adjvex = i;pe->nextarc =Gp->adjList[j].firstarc;Gp->adjList[j].firstarc = pe;*/}return G;
}//深度优先遍历
void DFS(Graph *G,int v,int visited[])
{visited[v]=1;printf("%d ",v);ArcNode *p=G->adjList[v].firstarc;while(p){if(visited[p->adjvex]==0){DFS(G,p->adjvex,visited);}p=p->nextarc;}
}int main()
{Graph *G;G=CreateALGraph(G);int visited[MAXVEX]= {0};printf("\n深度遍历\n");DFS(G,1,visited);return 0;
}/*所使用文件,第一行为顶点数、边数,之后为对应边
4 5
0 1
0 3
1 2
2 3
2 0
*/
链表、二叉树、图的建立与初始化C源代码相关推荐
- 链表、二叉树、图的建立与初始化
注:为了省去输入的麻烦,以下程序所用数据均从文件读取 1.链表建立与初始化 建立如下链表 建立一个名为data的txt文件,将此文件放在本程序所在文件夹目录下,文件内容为: #include < ...
- 数据结构之二叉树(遍历、建立、深度)
数据结构之二叉树(遍历.建立.深度) 1.二叉树的深度遍历 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树的所有结点,使得每个结点被访问一次且仅被访问一次. 对于二叉树的深度遍历,有前序遍历 ...
- 单链表——单链表的定义及基本操作(初始化、头插法尾插法建表、查找、插入、删除、判空等)
文章目录 单链表的定义 单链表上的操作 初始化 建立单链表 头插法建立单链表 尾插法建立单链表 遍历单链表 求单链表的长度 查找操作 按值查找 按位查找 插入操作 删除操作 判空操作 完整代码及实例 ...
- 图的建立、遍历及其应用(设图结点的元素类型为char,建立一个不少于8个顶点的带权无向图G,实现以下图的各种基本操作的程序)
实验目的:通过实验达到: ⑴ 理解和掌握图的基本概念.基本逻辑结构: ⑵ 理解和掌握图的邻接矩阵存储结构.邻接链表存储结构: ⑶ 理解和掌握图的DFS.BFS遍历操作的思想及其实现: ⑷ 加深对堆栈. ...
- 双链表——双链表的定义及其基本操作(初始化、头插法尾插法建表、插入、查找、删除、判空等)
文章目录 双链表的定义 双链表上的操作 初始化 插入操作 建立双链表 头插法建立双链表 尾插法建立双链表 遍历操作 求双链表的长度 查找操作 按值查找 按位查找 删除操作 判空操作 完整代码及实例 总 ...
- SDUT_2116 数据结构实验之链表一:顺序建立链表
点击打开链接 数据结构实验之链表一:顺序建立链表 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem D ...
- virtualenv在Ubuntu18.10(64位)中的用法(命令和图形化建立虚拟环境)
virtualenv吃系统版本,所以系统python3.6的对应的最高版本为ubuntu18.10 且celery部分功能不支持python3.7 而anaconda3太占用空间. 所以不要使用太新的 ...
- 1. 创建一个桌子Table类,该类中有桌子名称,重量,桌面宽度,长度及桌子高度属性。要求: ① 设计并画出桌子Table类类图; ② 用构造函数初始化所有数据成员; ③ Area() :计算桌面的
题目 1. 创建一个桌子Table类,该类中有桌子名称,重量,桌面宽度,长度及桌子高度属性.要求: ① 设计并画出桌子Table类类图: ② 用构造函数初始化所有数据成员; ③ Area() :计 ...
- 《算法笔记》之链表二叉树
链表 之前找工作的时候,受益于算法笔记,这次开始复习,也是从这本书入手,打算重新学习算法,因此从最基础的开始,只要我们去一点一点付出,最后一定结果不会差.加油,道虽远,行将就至. 链表有若干个节点组成 ...
最新文章
- 杭电 HOJ 2553 N皇后问题 解题报告
- Solaris IPMP 配置
- svn里ignore不需要提交的用户文档
- C++数组(一维、二维、三维)的动态分配new、初始化memset和释放delete
- MyEclipse设置代码自动补全,及取消空格和‘=’补全
- 笨办法学 Python · 续 练习 47:`bc`
- GoFrame v1.6.0 发布,Go 应用开发框架
- 区块链java语言,基于Java语言构建区块链(一)—— 基本原型
- 【github】命令和错误小结
- Android 源码 分析
- u 20ubuntu 安装 postfix_惠普ENVY 13-AQ0011TX(6QT48PA)笔记本安装win10教程图解
- python数字转英文_GitHub - Ailln/en2an: 快速转化「英文数字」和「阿拉伯数字」
- C#隐藏任务管理器中进程 支持win10 win8.1 win7
- HR/FR/EFR/AMR
- Allegro任意形状铜皮倒圆角
- netcat常用命令
- 友盟集成第三方分享和登录
- 每天笑一笑2012年8月28日
- maya渲染序列文件存在检测工具
- java实现远程登录RDP
热门文章
- 竞价猎马技术具体操作
- c++,c->循环与分支,格物致知,下节课再见
- 微软“免费域名邮箱”Windows Live Custom Domains
- ESP8266开发之旅 阿里云物联网平台篇② MQTT.FX客户端模拟 调试 MQTT LED智能灯控制系统
- Deep Learning 最优化方法之RMSProp
- CSS3--用CSS3实现无限循环的无缝滚动
- 劳动合同到期提醒怎么设置,怎么在便签上设置合同到期提醒
- 智能土壤墒情监测清易便携式土壤速测仪使用方法
- char *a【】详解
- 中软国际python机试题_【中软国际c语言开发笔试试题及答案】 - 面试网