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

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. 链表、二叉树、图的建立与初始化

    注:为了省去输入的麻烦,以下程序所用数据均从文件读取 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. 杭电 HOJ 2553 N皇后问题 解题报告
  2. Solaris IPMP 配置
  3. svn里ignore不需要提交的用户文档
  4. C++数组(一维、二维、三维)的动态分配new、初始化memset和释放delete
  5. MyEclipse设置代码自动补全,及取消空格和‘=’补全
  6. 笨办法学 Python · 续 练习 47:`bc`
  7. GoFrame v1.6.0 发布,Go 应用开发框架
  8. 区块链java语言,基于Java语言构建区块链(一)—— 基本原型
  9. 【github】命令和错误小结
  10. Android 源码 分析
  11. u 20ubuntu 安装 postfix_惠普ENVY 13-AQ0011TX(6QT48PA)笔记本安装win10教程图解
  12. python数字转英文_GitHub - Ailln/en2an: 快速转化「英文数字」和「阿拉伯数字」
  13. C#隐藏任务管理器中进程 支持win10 win8.1 win7
  14. HR/FR/EFR/AMR
  15. Allegro任意形状铜皮倒圆角
  16. netcat常用命令
  17. 友盟集成第三方分享和登录
  18. 每天笑一笑2012年8月28日
  19. maya渲染序列文件存在检测工具
  20. java实现远程登录RDP

热门文章

  1. 竞价猎马技术具体操作
  2. c++,c->循环与分支,格物致知,下节课再见
  3. 微软“免费域名邮箱”Windows Live Custom Domains
  4. ESP8266开发之旅 阿里云物联网平台篇② MQTT.FX客户端模拟 调试 MQTT LED智能灯控制系统
  5. Deep Learning 最优化方法之RMSProp
  6. CSS3--用CSS3实现无限循环的无缝滚动
  7. 劳动合同到期提醒怎么设置,怎么在便签上设置合同到期提醒
  8. 智能土壤墒情监测清易便携式土壤速测仪使用方法
  9. char *a【】详解
  10. 中软国际python机试题_【中软国际c语言开发笔试试题及答案】 - 面试网