一些可运行的C语言数据结构代码
网上有很多C语言数据结构代码;有的不能运行;下面是一些能运行的,和运行截图;备用一下;
1 队列
#include<stdio.h>
#include<stdlib.h>#define QUEUE_SIZE 50 typedef struct SeqQueue
{ int data[QUEUE_SIZE]; int front; int rear; }Queue; Queue *InitQueue()
{ Queue *q = (Queue *)malloc(sizeof(Queue)); if(q == NULL) { printf("Malloc failed!\n"); exit(-1); } q->front = 0; q->rear = 0; return q;
} int IsFull(Queue *q)
{ return ((q->rear+1)%QUEUE_SIZE == q->front);
} int IsEmpty(Queue *q)
{ return (q->front == q->rear);
} void Enqueue(Queue *q,int n)
{ if(IsFull(q)) { return; } q->data[q->rear] = n; q->rear = (q->rear+1)%QUEUE_SIZE;
} int Dequeue(Queue *q)
{ if(IsEmpty(q)) { return 0; } int tmp = q->data[q->front]; q->front = (q->front+1)%QUEUE_SIZE; return tmp;
} void main()
{ Queue *q = InitQueue(); int i; for(i=0;i<10;i++) { Enqueue(q,i*i); } while(!IsEmpty(q)) { int data = Dequeue(q); printf("%d-->",data); }
}
2 栈
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>// 定义一个节点的结构
typedef struct node
{int member; //数据域struct node * pNext;//指针域
}Node,*pNode;// 定义一个栈结构
typedef struct stack
{pNode Top; //栈顶pNode Bottom; //栈底
}Stack,* pStack;void InitStack(pStack ); // 初始化栈的函数
bool Push(pStack ,int); // 进行压栈操作的函数
void TraverseStack(pStack ); // 遍历栈函数
bool Empty(pStack ); // 判断栈是否为空的函数
int Pop(pStack ); // 进行出栈操作的函数
void Clear(pStack ); // 清空栈的函数int main(void)
{Stack s; // 定义一个栈int i;int num;int data; // 临时保存用户输入的数据int re_num; // 保存Pop函数的返回值InitStack(&s);printf("你想输入几个数据啊:");scanf("%d",&num);for (i = 0;i < num;i++){printf("第 %d 个数:",i+1);scanf("%d",&data);if (Push(&s,data)) // 调用Push函数{continue;}else{printf("进行进栈操作失败!\n");exit(-1);}}TraverseStack(&s); // 调用遍历函数printf("你想去掉几个数啊: ");scanf("%d",&data);printf("你去掉的数字是:");for (i = 0; i < data;i++){re_num = Pop(&s); // 调用Pop函数,并把返回值赋给re_num;printf("%d ",re_num);}printf("看看删除后还有啥:");TraverseStack(&s);printf("\n");Clear(&s); // 调用清空栈函数printf("遍历下看看栈清空没····\n");TraverseStack(&s);printf("\n");return 0;
}// 进行栈的初始化的函数
void InitStack(pStack ps)
{ps->Top = (pNode)malloc(sizeof(Node)); // 分配内存空间给栈顶if (NULL == ps->Top){printf("动态分配内存失败\n");exit(-1);}else{ps->Bottom = ps->Top; // 使栈底也指向栈顶空间ps->Top->pNext = NULL; // 栈顶指针置为NULL;}return ;
}// 进行进栈操作的函数
bool Push(pStack ps,int data)
{pNode pNew = (pNode)malloc(sizeof(Node)); // 定义一个新节点,并分配内存空间if (NULL == pNew){return false;}pNew->member = data; // 把要进栈的数据赋给新节点的member成员pNew->pNext = ps->Top; // 使新节点的指针指向栈顶ps->Top = pNew; // 把新节点作为新栈顶return true;
}// 遍历栈的函数
void TraverseStack(pStack ps)
{pNode pNew = ps->Top;while(pNew!= ps->Bottom) // 只要栈顶不等于栈底,循环{printf("%d ",pNew->member); // 打印栈顶的成员memberpNew = pNew->pNext; // 栈顶指针向下移动一次}return ;
}// 判断栈是否为空
bool Empty(pStack ps)
{if(ps->Top == ps->Bottom) // 栈顶等于栈底,不就是栈中没数据么{return true;}else{return false;}
}// 进行出栈操作函数
int Pop(pStack ps)
{pNode pSwap = NULL; int return_val;if (Empty(ps)) //判断栈是否为空,为空就不能进行出栈操作{exit(-1);}else{return_val = ps->Top->member; // 把栈顶的成员member的值赋给return_val做为函数返回值pSwap = ps->Top; // 使pSwap指向栈顶ps->Top = ps->Top->pNext; // 使栈顶指向栈顶下一个节点free(pSwap); // 释放以前的栈顶空间return return_val;}
}// 清空栈的函数
void Clear(pStack ps)
{pNode pNew = NULL;while (ps->Top != ps->Bottom) // 栈顶和栈底不等,循环{pNew = ps->Top; // 使一个新节点和栈顶指向同一空间ps->Top = ps->Top->pNext; // 使栈顶指向栈顶的下一个节点free(pNew); // 释放掉以前的栈顶空间}return ;
}
3 树
#include<stdio.h>
#include<stdlib.h>typedef int ElemType; //数据类型
typedef int Status; //返回值类型//定义二叉树结构
typedef struct BiTNode{ElemType data; //数据域struct BiTNode *lChild, *rChlid; //左右子树域
}BiTNode, *BiTree;//先序创建二叉树
Status CreateBiTree(BiTree *T)
{ElemType ch;ElemType temp;scanf("%d", &ch);temp = getchar();if (-1 == ch)*T = NULL;else{*T = (BiTree)malloc(sizeof(BiTNode));if (!(*T))exit(-1);(*T)->data = ch;printf("输入%d的左子节点:", ch);CreateBiTree(&(*T)->lChild);printf("输入%d的右子节点:", ch);CreateBiTree(&(*T)->rChlid);}return 1;
}//先序遍历二叉树
void TraverseBiTree(BiTree T)
{if (NULL == T)return ;printf("%d ", T->data);TraverseBiTree(T->lChild);TraverseBiTree(T->rChlid);}//中序遍历二叉树
void InOrderBiTree(BiTree T)
{if (NULL == T)return ;InOrderBiTree(T->lChild);printf("%d ", T->data);InOrderBiTree(T->rChlid);}//后序遍历二叉树
void PostOrderBiTree(BiTree T)
{if (NULL == T)return ;PostOrderBiTree(T->lChild);PostOrderBiTree(T->rChlid);printf("%d ", T->data);}//二叉树的深度int TreeDeep(BiTree T)
{int deep = 0;if(T){int leftdeep = TreeDeep(T->lChild);int rightdeep = TreeDeep(T->rChlid);deep = leftdeep>=rightdeep?leftdeep+1:rightdeep+1;}return deep;
}//求二叉树叶子结点个数int Leafcount(BiTree T,int &num)
{ if(T){if(T->lChild ==NULL &&T->rChlid==NULL) num++;Leafcount(T->lChild,num);Leafcount(T->rChlid,num);}return num;
}
//主函数
int main(void)
{BiTree T;BiTree *p = (BiTree*)malloc(sizeof(BiTree));int deepth,num=0 ;printf("请输入第一个结点的值,-1表示没有叶结点:\n");CreateBiTree(&T);printf("先序遍历二叉树:\n");TraverseBiTree(T);printf("\n");printf("中序遍历二叉树:\n");InOrderBiTree(T);printf("\n");printf("后序遍历二叉树:\n");PostOrderBiTree(T);printf("\n");deepth=TreeDeep(T);printf("树的深度为:%d",deepth);printf("\n");Leafcount(T,num);printf("树的叶子结点个数为:%d",num);printf("\n");return 0;
}
4 图
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MAX 20 //图可以存储的最大节点数为20;
struct tnode
{struct tnode * next;//指向下一个临节点int data;//存放邻节点在数组中的位置
};
struct node
{int valu;//存放节点的值struct tnode * link;//指向邻节点
};
struct picture
{struct node nd[MAX]; //声明一个节点数组int count; //图中的节点数char a; //建立的图的类型
};
struct picture * createpicture();
int search(struct picture *p,int value);//查找value在nd数组中的位置
void bfs(struct picture * q,int i,int visit[]); //广度优先遍历
void dfs(struct picture * q,int i,int visit[]);//深度优先遍历
void traversedfs(struct picture *p);
void traversebfs(struct picture *p);
int main()
{char a;struct picture *p;p=createpicture();while(1){getchar();printf("现在将对图进行遍历,若使用广度优先遍历,请输入a,若使用深度优先遍历请输入b,清屏请输入c,退出请输入d:\n");scanf("%c",&a);if(a=='a'){printf("深度优先遍历如下:\n");traversebfs(p);}if(a=='b'){printf("广度优先遍历如下:\n");traversedfs(p);}if(a=='c')system("cls");if(a=='d')exit(0);}return 0;
}
struct picture * createpicture()
{int i,j,k,l;//l中存放返回的节点在数组中的位置char a;struct picture *p;p=(struct picture *)malloc(sizeof(struct picture));struct tnode * t;printf("请输入你要建立的图中的节点数以及图的类型(a表示无向图b表示有向图):\n");scanf("%d %c",&i,&a);p->count=i;p->a=a;printf("请依次输入各节点的值(每输完一个节点的值按回车结束):\n");for(i=0;i<p->count;i++){scanf("%d",&j);p->nd[i].valu=j;p->nd[i].link=NULL;}for(i=0;i<p->count;i++){printf("输入与数据值为%d的节点相邻的节点的数据值(每输完一个节点的值按回车结束),若不再含有相邻的值请输入-1\n",p->nd[i].valu);while(1){scanf("%d",&k);if(k==-1)break;l=search(p,k);if(l!=-1){t=(struct tnode *)malloc(sizeof(struct tnode));t->data=l;t->next=p->nd[i].link;p->nd[i].link=t;}elseprintf("无此数据值!\n");//getchar();}}return p;
}
int search(struct picture *p,int value)
{int i;for(i=0;i<p->count;i++){if(value==p->nd[i].valu){return i;}}return -1;
}
void traversedfs(struct picture *p)
{int i;int visit[MAX];//申明一个标志数组,将其初始值置为0,0表示该节点未被访问过,1表示该节点被访问过for(i=0;i<p->count;i++){visit[i]=0;}for(i=0;i<p->count;i++){if(visit[i]==0){dfs(p,i,visit);}}//getchar();
}
void dfs(struct picture * q,int i,int visit[])//i表示数组的下标值visit的下标与p中的下标是一一对应的关系
{struct tnode * w;printf("%d\n",q->nd[i].valu);visit[i]=1;w=q->nd[i].link;while(w!=NULL){if(visit[w->data]==0){dfs(q,w->data,visit);}else{w=w->next;}}
}
void traversebfs(struct picture *p)
{int i;int visit[MAX];//申明一个标志数组,将其初始值置为0,0表示该节点未被访问过,1表示该节点被访问过for(i=0;i<p->count;i++){visit[i]=0;}for(i=0;i<p->count;i++){if(visit[i]==0){bfs(p,i,visit);}}//getchar();
}
void bfs(struct picture * q,int i,int visit[])
{struct tnode *w;int a[MAX];//声明一个队列int f,r;int v;f=r=0;visit[i]=1;printf("%d\n",q->nd[i].valu);a[r]=i;r++;//进行入队操作while(f!=r){v=a[f];f++;//岀队操作w=q->nd[v].link;while(w!=NULL){if(visit[w->data]==0){visit[w->data]=1;printf("%d\n",q->nd[w->data].valu);a[r]=w->data;r++;}w=w->next;}}
}
上述工程下载
http://pan.baidu.com/s/1o8qyWLs
文件名
sjjgdemo-c
5 C数据结构资源链接
http://outofmemory.cn/code-snippet/7235/C-language-scheme-create-and-BFS-DFS-bianli
http://blog.csdn.net/Golden_Shadow/article/category/745332
http://www.oschina.net/code/list/?lang=cpp&catalog=programming-base&show=time
一些可运行的C语言数据结构代码相关推荐
- C语言数据结构代码——有向图
Head.H #define VEXNUMMAX 10typedef enum {DG = 0,DN,UDG,UDN }EnumGraphKind;typedef struct _ArcNode {i ...
- R语言统计代码运行耗时实战:计算代码运行时间、使用proc.time函数计算代码运行时间
R语言统计代码运行耗时实战:计算代码运行时间.使用proc.time函数计算代码运行时间 目录
- 下载的c语言程序代码怎么运行,CFree怎么运行程序 编译运行C语言程序代码的方法...
CFree是一款C语言编译软件,用户可以利用这款软件编译C/C++程序 ,如果你想要运行已经编写好的C语言代码,只需要几个简单的操作即可实现,如果你还不知道怎么运行,就赶快来看看下面的教程吧! 1.首 ...
- 校园导游图C语言数据结构,用C语言和数据结构中的无向图存储结构编一个校园导游图完全的程序代码.docx...
用C语言和数据结构中的无向图存储结构编一个校园导游图完全的程序代码.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下 ...
- 数据结构上机-尾、头插法建立单链表-单链表遍历C语言完整代码实现
点击此处跳转视频链接:数据结构上机-尾.头插法建立单链表-单链表遍历C语言完整代码实现
- C语言在线代码运行编译工具推荐
C语言在线运行编译,是一款可在线编程编辑器,在编辑器上输入C语言代码,点击运行,可在线编译运行C语言,C语言代码在线运行调试,C语言在线编译,可快速在线测试您的C语言代码,在线编译C语言代码发现是否存 ...
- Lua语言在线代码运行编译工具推荐
Lua语言在线运行编译,是一款可在线编程编辑器,在编辑器上输入Lua语言代码,点击运行,可在线编译运行Lua语言,Lua语言代码在线运行调试,Lua语言在线编译,可快速在线测试您的Lua语言代码,在线 ...
- PHP语言在线代码运行编译工具推荐
PHP语言在线运行编译,是一款可在线编程编辑器,在编辑器上输入PHP语言代码,点击运行,可在线编译运行PHP语言,PHP语言代码在线运行调试,PHP语言在线编译,可快速在线测试您的PHP语言代码,在线 ...
- c语言程序如何运行程序,CFree怎么运行程序 编译运行C语言程序代码的方法
CFree是一款C语言编译软件,用户可以利用这款软件编译C/C++程序 ,如果你想要运行已经编写好的C语言代码,只需要几个简单的操作即可实现,如果你还不知道怎么运行,就赶快来看看下面的教程吧! 1.首 ...
最新文章
- python heapq模块使用
- 用外观判断论文好坏?这位顶会领域主席的论文被自己的AI审稿系统拒绝了
- JZOJ 5344. 【NOIP2017模拟9.3A组】摘果子
- python实现数字形式转换
- ios 不被遮挡 阴影_为何你没见到日环食?你不知道的天象常识原来还有这么多 | 返朴...
- Java StringBuilder length()方法与示例
- flash builder eclipse插件安装
- 数人云CTO解读Docker 1.12和金融业容器化
- 一行代码就能解决微服务分布式事务问题,你知道GTS怎么做到的吗?
- 通向财务自由之路01_导读
- oracle 流标和sql效率,Oracle 中流标使用实例
- 模型预测控制路径跟踪python语言实现
- 高通平台开发系列讲解(外设篇)BMI160基本配置
- c语言程序设计超市会员卡管理系统,C语言程序设计课程设计报告超市水果信息管理系统...
- 关于Smartphone的智能手机键盘输入法的疑惑
- JDK1.8源码分析:可重入锁ReentrantLock和Condition的实现原理
- python十个实战项目
- termux是等于linux终端,termux终端
- Gatling 录制功能使用
- 基于Python的数据采集系统
热门文章
- java调用网络打印机不稳定_新手处理共享打印机总是没有反应的故障
- Hystrix 熔断器02 —— hystrix 案例之高并发测试
- shiro的QuickStart
- v-show 与 v-if 的区别
- 多款eclipse黑色坏境任你选择,只要导入配置
- Linux 服务器配置信息查询方法,国产化申威服务器配置信息查看演示
- C++ leetcode 7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
- cmd中添加中文字体
- [YTU]_2489( C++结构体之统计最高最低分)
- Building an MFC project for a non-Unicode character set is deprecated