注:为了省去输入的麻烦,以下程序所用数据均从文件读取

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->lchild);node->rchild =creat_bitree(node->rchild);}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
*/

链表、二叉树、图的建立与初始化相关推荐

  1. 链表、二叉树、图的建立与初始化C源代码

    注:为了省去输入的麻烦,以下程序所用数据均从文件读取 1.链表建立与初始化 建立如下链表 建立一个名为data的txt文件,将此文件放在本程序所在文件夹目录下,文件内容为: #include < ...

  2. 数据结构之二叉树(遍历、建立、深度)

    数据结构之二叉树(遍历.建立.深度) 1.二叉树的深度遍历 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树的所有结点,使得每个结点被访问一次且仅被访问一次. 对于二叉树的深度遍历,有前序遍历 ...

  3. 单链表——单链表的定义及基本操作(初始化、头插法尾插法建表、查找、插入、删除、判空等)

    文章目录 单链表的定义 单链表上的操作 初始化 建立单链表 头插法建立单链表 尾插法建立单链表 遍历单链表 求单链表的长度 查找操作 按值查找 按位查找 插入操作 删除操作 判空操作 完整代码及实例 ...

  4. 图的建立、遍历及其应用(设图结点的元素类型为char,建立一个不少于8个顶点的带权无向图G,实现以下图的各种基本操作的程序)

    实验目的:通过实验达到: ⑴ 理解和掌握图的基本概念.基本逻辑结构: ⑵ 理解和掌握图的邻接矩阵存储结构.邻接链表存储结构: ⑶ 理解和掌握图的DFS.BFS遍历操作的思想及其实现: ⑷ 加深对堆栈. ...

  5. 双链表——双链表的定义及其基本操作(初始化、头插法尾插法建表、插入、查找、删除、判空等)

    文章目录 双链表的定义 双链表上的操作 初始化 插入操作 建立双链表 头插法建立双链表 尾插法建立双链表 遍历操作 求双链表的长度 查找操作 按值查找 按位查找 删除操作 判空操作 完整代码及实例 总 ...

  6. SDUT_2116 数据结构实验之链表一:顺序建立链表

    点击打开链接 数据结构实验之链表一:顺序建立链表 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem D ...

  7. virtualenv在Ubuntu18.10(64位)中的用法(命令和图形化建立虚拟环境)

    virtualenv吃系统版本,所以系统python3.6的对应的最高版本为ubuntu18.10 且celery部分功能不支持python3.7 而anaconda3太占用空间. 所以不要使用太新的 ...

  8. 1. 创建一个桌子Table类,该类中有桌子名称,重量,桌面宽度,长度及桌子高度属性。要求: ① 设计并画出桌子Table类类图; ② 用构造函数初始化所有数据成员; ③ Area() :计算桌面的

    题目 ‬‬1. 创建一个桌子Table类,该类中有桌子名称,重量,桌面宽度,长度及桌子高度属性.要求: ① 设计并画出桌子Table类类图: ② 用构造函数初始化所有数据成员; ③ Area() :计 ...

  9. 《算法笔记》之链表二叉树

    链表 之前找工作的时候,受益于算法笔记,这次开始复习,也是从这本书入手,打算重新学习算法,因此从最基础的开始,只要我们去一点一点付出,最后一定结果不会差.加油,道虽远,行将就至. 链表有若干个节点组成 ...

最新文章

  1. JVM中可生成的最大Thread数量
  2. [图]2004,值得欣赏的版面(三)
  3. pandas 把某一列中字符串变数值_Python学习教程:Python数据分析实战基础 | 初识Pandas...
  4. 传百度无人车计划分拆,百度回复:不实信息,目前未有分拆计划
  5. UE4 在游戏中使用Slate
  6. eos linux开发语言,EOSIO与Linux之间的区别
  7. java monitor 翻译_Java 对象锁与monitor的区别
  8. Nginx:配置 proxy_pass 代理转发
  9. java使用poi在word中生成柱状图、折线图、饼图、柱状图+折线图组合图、动态表格、文本替换、图片替换 springboot项目
  10. 计算机一级字幕设置,字幕怎么用-看电影没字幕怕什么!老司机教你手动设置字幕!...
  11. ## 错误:ora-01922 解决方案
  12. 抖音视频SEO排名获客软件。
  13. MySQL 解压版下载安装
  14. 计算机无法登录到网络,电脑无法连接到这个网络是什么原因
  15. Huhu Command 正式发布!实用命令行存取工具
  16. 如何通过QQ进行手机号溯源
  17. java 解码 encodeuri_js与java encodeURI 进行编码与解码
  18. 【案例30】WebSphere诡异宕机
  19. 升级 | ONES Wiki 多人实时协作,万物皆可编辑
  20. 树莓派安装opencv4.3.0

热门文章

  1. 【微信小程序开发】云函数Cannot find module ‘wx-server-sdk‘
  2. 如何使用Saleae Logic 16抓取I2C接口协议
  3. ubuntu 左手使用习惯
  4. 微信中无法下载APP的解决办法---微信自动跳转浏览器打开下载链接
  5. Android自定义View-圆形印章
  6. 服务器和数据库哪一个更重要
  7. 智慧城市-物联网的衍生物
  8. mysqldatareader获取整行数据给datarow_基于数据库类型的c#set datarow DateTime字段
  9. 有关配置文件 properties无法读取问题
  10. Win7下安装VS2017心路历程