数据结构课程上机参考代码
SqList
#include <iostream>using namespace std;#include <malloc.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status; /* int是函数的类型,其值是函数结果状态代码,如OK等 */#define LIST_INIT_SIZE 10 /* 线性表存储空间的初始分配量 */#define LISTINCREMENT 2 /* 线性表存储空间的分配增量 */typedef int ElemType;typedef struct{ElemType *elem;int length;int listsize;}SqList;Status InitList(SqList &L) /* 算法2.3 */{L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L.elem)exit(OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;return OK;}Status ListInsert(SqList &L, int i ,ElemType e) /* 算法2.4 */{ int *newbase,*q,*p;if(i<1||i>L.length+1) /* i值不合法 */return ERROR; if(L.length>=L.listsize) /* 当前存储空间已满,增加分配 */{newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase)exit(OVERFLOW); /* 存储分配失败 */L.elem=newbase; /* 新基址 */L.listsize+=LISTINCREMENT; /* 增加存储容量 */}q=L.elem+i-1; /* q为插入位置 */for(p=L.elem+L.length-1;p>=q;--p) /* 插入位置及之后的元素右移 */*(p+1)=*p;*q=e; /* 插入e */++L.length; /* 表长增1 */return OK;}Status ListDelete(SqList &L,int i,ElemType &e) /* 算法2.5 */{int *p,*q;if(i<1||i>L.length) /* i值不合法 */return ERROR;p=L.elem+i-1; /* p为被删除元素的位置 */e=*p; /* 被删除元素的值赋给e */q=L.elem+L.length-1; /* 表尾元素的位置 */for(++p;p<=q;++p) /* 被删除元素之后的元素左移 */*(p-1)=*p;L.length--; /* 表长减1 */return OK;}int LocateElem(SqList L, ElemType e) /* 算法2.6*/{int *p;int i=1;p=L.elem; /* p的初值为第1个元素的存储位置 */while(i<=L.length&&(*p++!=e))++i;if(i<=L.length)return i;elsereturn 0;}void print(SqList L){int i;for(i=0;i<L.length;i++)printf("%d ", L.elem[i]);printf("\n");} int main(){SqList L;ElemType e;int i,n,t;InitList(L);cout<<"您要在表中插入几个元素:";cin>>n;for(i=1;i<=n;i++){cin>>e;ListInsert(L,i,e);}cout<<"目前表中元素为:";print(L);cout<<"请输入您要查询的值:";cin>>e;i=LocateElem(L,e);if(i==0)cout<<"查找失败"<<endl;else cout<<e<<"在表中的位置为:"<<i<<endl;cout<<"请输入您要删除元素的位置:";cin>>i;t=ListDelete(L,i,e); /* 删除第j个数据 */if(t==ERROR)cout<<"删除第"<<i<<"个数据失败"<<endl;elsecout<<"删除第"<<i<<"个的元素值为"<<e<<endl;cout<<"目前表中元素为:";print(L);system("PAUSE");return 1;}
LinkList
#include <iostream>using namespace std;#include <malloc.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef struct LNode {ElemType data ;struct LNode *next ;
} LNode, *LinkList ;
Status GetElem_L ( LinkList L, int i, ElemType &e )
{LinkList p;int j;p=L->next;j=1;while(p && j<i){p=p->next;j++;}if ( !p || j>i )return ERROR;
}
Status ListInsert_L ( LinkList &L, int i , ElemType e ) {// 在带头结点的单链表L中第i个数据元素之前插入数据元素eLinkList p,s;int j=0;p=L;while(p && j<i-1){p=p->next;j++;}if ( !p || j>i-1 )return ERROR;s=(LinkList)malloc(sizeof(LNode));s->data=e; s->next= p->next ;p->next =s ;return OK;
}Status ListDelete_L ( LinkList &L, int i , ElemType &e ) {// 在带头结点的单链表L中,删除第i个元素,并由e返回其值LinkList p=L,q;int j=0;while(p && j<i-1){p=p->next;j++;}if ( !p || j>i-1 )return ERROR;q=p->next;p->next=q->next;e=q->data;free(q);return OK;
}void CreateList_L (LinkList &L, int n) {//逆位序输入n个元素的值,建立带头结点的单链表L。LinkList p;L=(LinkList) malloc(sizeof(LNode)) ;L->next=NULL;for( int i=n; i>0; --i){p= (LinkList) malloc(sizeof(LNode)) ;cin>>p->data;p->next=L->next;L->next=p;}
}void print(LinkList L)
{LinkList p;p=L->next;while(p){cout<<p->data;p=p->next;}
}
int main(){LinkList L;ElemType e;int i,n,t;cout<<"您要在表中插入几个元素:";cin>>n;CreateList_L(L,n);cout<<"目前表中元素为:";print(L);cout<<"请输入您要查询元素的位置:";cin>>i;GetElem_L(L,i,e);cout<<"元素值为:"<<e<<endl;cout<<"请输入您要删除元素的位置:";cin>>i;t=ListDelete_L(L,i,e);if(t==ERROR)cout<<"删除第"<<i<<"个数据失败"<<endl;elsecout<<"删除第"<<i<<"个的元素值为"<<e<<endl;cout<<"目前表中元素为:";print(L);system("PAUSE");return 1;}
Stack
#include <iostream>using namespace std;#include <stdio.h>#include <malloc.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int SElemType;typedef struct {SElemType *base ;SElemType *top ;int stacksize ;} SqStack;Status InitStack(SqStack &s ){s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof( SElemType));if (!s.base) exit (OVERFLOW) ;s.top=s.base ;s.stacksize=STACK_INIT_SIZE ;return OK;}Status Push (SqStack &s, SElemType e){if (s.top-s.base >= s.stacksize){s.base=(SElemType*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));if (!s.base) exit (OVERFLOW);s.top=s.base+ s.stacksize;s.stacksize+= STACKINCREMENT ;}*s.top++=e ;return OK;
}Status Pop (SqStack &s, SElemType &e){if (s.top==s.base) return ERROR ;e=*--s.top ;return OK ;}Status StackEmpty(SqStack s ){if (s.top==s.base) return 1;else return 0;}void conversion(int N,int d){SqStack s;int x;InitStack(s);while( N ) {Push (s,N % d );N=N / d ;}cout<<"转换后的数值为:";while(!StackEmpty (s)){Pop (s,x ) ;if(d==16){if(x>=10)printf("%c",x-10+'A');elsecout<<x;}else cout<<x ;}
}int main(){int n,d;cout<<"您要把哪个整数转化为几进制:";cin>>n>>d;conversion(n,d);system("PAUSE");return 1;}
Queue
#include <iostream>using namespace std;#include <malloc.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int QElemType;typedef struct QNode {QElemType data ;struct QNode *next ;
} QNode, *Queueptr ;
typedef struct {Queueptr front;Queueptr rear ;} Lqueue ;Status InitQueue(Lqueue &Q ){Q.front=Q.rear=(Queueptr)malloc(sizeof(QNode));if (!Q.front) exit (OVERFLOW) ;Q.front->next=NULL ;return OK;}Status Enqueue(Lqueue &Q,QElemType e ){Queueptr p;p=(Queueptr)malloc(sizeof(QNode));if (!p) exit (OVERFLOW) ;p->data=e ; p->next=NULL ;Q.rear->next=p; Q.rear=p;return OK;}Status Dequeue(Lqueue &Q,QElemType &e ){Queueptr p;if (Q.front==Q.rear) return ERROR;p=Q .front->next ; e=p->data;Q.front->next=p->next;if (Q.rear==p) Q.rear=Q.front;free(p);return OK;}int Locate (Lqueue Q, QElemType e )
{Queueptr p;int i;p=Q.front->next;i=1;while(p && p->data!=e){p=p->next;i++;}if ( p )return i;elsereturn 0;
}void print(Lqueue Q)
{Queueptr p;p=Q.front->next;while(p){cout<<p->data<<" ";p=p->next;}cout<<endl;
}
int main(){Lqueue Q;QElemType e;int i,n,t;InitQueue(Q);cout<<"您要在队列中插入几个元素:";cin>>n;for(i=1;i<=n;i++){cin>>e;Enqueue(Q,e);}cout<<"目前队列中元素为:";print(Q);cout<<"请输入您要查询的元素";cin>>e;t=Locate(Q,e);if(t==0)cout<<e<<"不在队列中"<<endl;elsecout<<e<<"是队列中的第"<<t<<"个元素"<<endl;Dequeue(Q,e);cout<<e<<"出队"<<endl;cout<<"目前队列中元素为:";print(Q);system("PAUSE");return 1;}
Tree
#include <iostream>using namespace std;#include <malloc.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status; typedef char TElemType;typedef struct BiTNode {TElemType data;struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;void Preorder(BiTree T){ // 先序遍历二叉树 if (T) {cout<<T->data; // 访问结点Preorder(T->lchild); // 遍历左子树Preorder(T->rchild); // 遍历右子树}}
void Inorder(BiTree T){ // 中序遍历二叉树 if (T) {Inorder(T->lchild); // 遍历左子树cout<<T->data; // 访问结点Inorder(T->rchild); // 遍历右子树}}
void CountLeaf (BiTree T, int &count){ if ( T ) {if ((!T->lchild)&& (!T->rchild)) count++;CountLeaf( T->lchild, count); // 统计左子树中叶子结点个数CountLeaf( T->rchild, count); // 统计右子树中叶子结点个数}}int Depth (BiTree T ){ int depthval,depthLeft,depthRight;if ( !T ) depthval = 0;else{ depthLeft = Depth( T->lchild );depthRight= Depth( T->rchild );depthval = 1 +(depthLeft>depthRight?depthLeft:depthRight);}return depthval;}void CreateBiTree(BiTree &T) {// 按先序次序输入二叉树中结点的值(一个字符),//空格字符表示空树,构造二叉链表表示的二叉树T。char ch;scanf("%c",&ch);if (ch==' ') T = NULL;else {if (!(T = (BiTNode *)malloc(sizeof(BiTNode))))exit(OVERFLOW);T->data = ch; // 生成根结点CreateBiTree(T->lchild); // 构造左子树CreateBiTree(T->rchild); // 构造右子树}} // CreateBiTree int main()
{BiTree T;int leafnum=0,depth;cout<<"Please input the preorder of the tree:";CreateBiTree(T);cout<<"The preorder of the tree is:";Preorder(T);cout<<endl;cout<<"The inorder of the tree is:";Inorder(T);cout<<endl;depth= Depth(T);cout<<"The depth of the tree is:"<<depth<<endl;CountLeaf(T,leafnum);cout<<"The leaf num of the tree is:"<<leafnum<<endl; system("PAUSE");return 1;
}
邻接矩阵Graph
#include<iostream>
using namespace std;#define MAXSIZE 9 // 存储空间初始分配量
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0typedef int Status;
typedef char VertexType;typedef struct
{VertexType vexs[MAXSIZE];int arcs[MAXSIZE][MAXSIZE];int vexnum,arcnum;
}Graph;int LocateVex(Graph G,char v)
{for(int i=0;i<G.vexnum;i++)if(G.vexs[i]==v)return i;return -1;
}
// 建立图的邻接矩阵
void CreateUDG(Graph &G)
{int i,j,k;printf("输入顶点数和边数:\n");cin>>G.vexnum>>G.arcnum;for(i = 0;i < G.vexnum;i++)cin>>G.vexs[i];for(i = 0; i < G.vexnum;i++)for(j = 0; i < G.vexnum;i++)G.arcs[i][j]=0;for(k = 0;k < G.arcnum;k++){char v1,v2;cout<<"输入边上的两个顶点:\n";cin>>v1>>v2;i=LocateVex(G,v1);j=LocateVex(G,v2);G.arcs[i][j]=G.arcs[j][i]=1;}
}int FirstAdjVex(Graph G, int v)
{int j;for(j=0;j<G.vexnum;j++)if(G.arcs[v][j]==1)return j;return -1;
}int NextAdjVex(Graph G, int v, int w)
{int j;for(j=w+1;j<G.vexnum;j++)if(G.arcs[v][j]==1)return j;return -1;
}int visited[MAXSIZE];// 邻接矩阵的深度优先递归算法
void DFS(Graph G, int v)
{visited[v] = TRUE;cout<<G.vexs[v];for(int w = FirstAdjVex(G, v); w>=0; w = NextAdjVex(G, v, w))if ( !visited[w] ) DFS(G, w);
}//邻接矩阵的深度遍历操作
void DFSTraverse(Graph G)
{int i;for(i = 0; i < G.vexnum; i++)visited[i] = 0;for(i = 0; i < G.vexnum; i++)if(!visited[i])DFS(G, i);
}int main()
{Graph G;CreateUDG(G);cout<<"深度遍历:";DFSTraverse(G);system("PAUSE");return 0;
}
相关文章:

我的路子 - 发现游戏为模型的软件架构方式
总觉得如果一个内容被深刻地理解了,那么当在他口中说出来的时候,应该是很简单才对。 所以一直觉得,编程里那些不容易理解的,需要记住很多内容的东西都是有缺陷的。自己又比较自我认可强,看不到别人的角度,表…

Vim对中文编码的支持[转]
Vim对中文编码的支持[转] Vim对中文编码的支持 1、支持中文编码的基础 Vim要更好地支持中文编码需要两个特性:multi_byte和iconv,可以用|:version|命令检查当前使用的Vim是否支持,否则的话需要重新编译。 2、影响中文编码的设置项 Vim中有几个…

C/C++中extern关键字详解
1 基本解释 :extern可以置于变量或者函数 前,以标示变量或者函数的定义在别的文件中 ,提示编译器遇到此变量和函数时在其他模块中寻找其定义 。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C&…

关于WPF的ComboBox中Items太多而导致加载过慢的问题
【WFP疑难】关于WPF的ComboBox中Items太多而导致加载过慢的问题 周银辉我的一个同事在加载字体列表时遇到了一个让人崩溃的问题:由于系统字体可能较多(可能有好几百项),导致使…

什么是3G通信
现在“3G通信”快要成为人们嘴上的口头禅了,那么您知道到底什么是3G通信吗?所谓3G,其实它的全称为3rd Generation,中文含义就是指第三代数字通信。1995年问世的第一代数字手机只能进行语音通话;而1996到1997年出现的第…

springMVC入门截图
mvc在bs系统下的应用 ---------------------------------------------------- 在web.xml中配置前端控制器(系统提供的一个servlet类 只需配置即可 无需程序员开发 ) -------------------------------------------------------------- ----------------…

Linux环境下的网络编程
本文介绍了在Linux环境下的socket编程常用函数用法及socket编程的一般规则和客户/服务器模型的编程应注意的事项和常遇问题的解决方法,并举了具体代 码实例。要理解本文所谈的技术问题需要读者具有一定C语言的编程经验和TCP/IP方面的基本知识。要实习本文的示例&am…

WEBSHELL恶意代码批量提取清除工具
场景 使用D盾扫描到WEBSHELL后可以导出有路径的文本文件。 最后手动去把WEBSHELL复制到桌面然后以文件路径命名,挨个删除。 D盾界面是这样的。 手动一个个找WEBSHELL并且改名效率太低,使用MFC写一个小工具方便去现场以后查WEBSHELL的工作。 技术思路 D盾…

判定两棵二叉树是否相似以及左右子树交换、层次编号
#include <iostream> using namespace std; #include <malloc.h> #include <stdio.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2#define MAX_TREE_SIZE 100//二叉树的最大结点数 typedef cha…

[Tracking] KCF + KalmanFilter目标跟踪
基于KCF和MobileNet V2以及KalmanFilter的摄像头监测系统 简介 这是一次作业。Tracking这一块落后Detection很多年了,一般认为Detection做好了,那么只要能够做的足够快,就能达到Tracking的效果了,实则不然,现在最快的我…

.net wap强制输出WML
强制输出WML:在web.config添加下面内容<system.web>下<browserCaps><result type"System.Web.Mobile.MobileCapabilities, System.Web.Mobile, Version1.0.5000.0, Cultureneutral, PublicKeyTokenb03f5f7f11d50a3a"/><use var"HTTP_USER_…

Tomcat在Linux上的安装与配置
1.安装好linux系统,下载适合的 Tomcat(jdk)下载JDK与Tomcatjdk 下载Tomcat 下载参考地址:jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.htmltomcat下载地址:http://tomcat.apache.org /download-70.cgi…

上机实践 1 初识 Java
实验 1 一个简单的 Java 应用程序 一、实验目的 掌握开发 Java 应用程序的 3 个步骤:编写源文件、编译源文件和运行应用程序。 二、实验要求 1. 参照教材中的指导,使用网络课程中提供的链接下载并安装 JKD 并配置环境变量。 2. 编写一个简单的 Java…

论COSPLAY / 谨以此文纪念我暂短的Cos生涯
COSPLAY是什么COSPLAY这一名词是是英文Costume Play(服饰扮演)的缩写,从事COSPLAY相关活动的人员一般被称为COSPLAYER。目前流行的COSPLAY活动内容主要集中于通过服装、道具、饰品等扮演动漫作品中的人物角色,而从宽泛的意义上来说…

python 3下对stm32串口数据做解析
1、最近有个想做一个传感器数据实时显示的上位机,常规的数据打印太频繁了,无法直观的看出数据的变化。 python下的上位机实现起来简单一点,网上找了一些python界面Tkinter相关资料和python串口的demo.测试实现了简单的数据显示。 Mark 一下问…

《深入理解计算机系统》第八章——异常控制流知识点总结
课本习题: 8.11 #include <unistd.h> #include <stdio.h>int main(){int i;for(i0;i<2;i) fork();printf("hello\n");exit(0);}/** Result:* hello* hello* hello* hello*/ 8.12 #include <stdio.h> #include <unistd.h>vo…

vs2003复制一个web窗体,没有更改指向同一个cs 文件,引发大问题
今天我在原来的考试系统的出题模块中,input模块,因为增加的一个web窗体编译有问题,于是就复制了原来的启动项页面input,再改了名字为set1,然后在set1页面上删除了控件和代码,再把set1设置为启动项,谁知道问题出来了:因为两个aspx文件都是指向同一个CS文件,从他们的H…

8.29 对象?数组?
今天发现我的filter函数有问题,翻不了页,一直报错: 这是一个封装好的Array原型扩展函数。 /* Array 原型方法扩展 */(function() {$.extend(Array.prototype, {// 添加内容,比push多一个检查相同内容部分add: function(item) {if …

Nginx的作用
1、Nginx简介: 2、简介: Nginx是一个高性能的HTTP和反向代理服务器。 支持的操作系统众多,windows、linux、MacOSX 可实现负载均衡 Rewrite功能强大 电商架构大部分都采用NginxTomcat的架构 3、命令行使用: 三个命令:(…

(转)TabContainer要实现服务器端回传
TabContainer要实现服务器端回传,出来在后台实现 OnActiveTabChanged 事件外, 还需要在前台实现 OnClientActiveTabChanged 事件,这是关键。 <asp:UpdatePanel ID"UpdatePanel1"runat"server"ChildrenAsTriggers"true"><con…

python 获取脚本所在目录
pythonsys.path__file__abspathrealpath 平时写python经常会想获得脚本所在的目录,例如有个文件跟脚本文件放在一个相对的目录位置,那就可以通过脚本文件的目录找到对应的文件,即使以后脚本文件移到其他地方,脚本也基本不需要改动…

《深入理解计算机系统》第十章——系统级I/0
目录 10.1Unix I/O 10.2文件 10.3打开和关闭文件 10.4读和写文件 10.5用RIO包建壮地读写 10.6读取文件元数据 10.7读取目录内容 10.8共享文件 10.9 I/O重定向 10.10 标准I/O 10.1Unix I/O 在Linux中,一切皆为文件。 文件I/O函数-------打开文件、读文件…

终于完成了“微软”化
整整忙活了一个下午,基本上我的笔记本完成了可怕的“微软”化进程!是的,当我完成FOXMAIL中邮件向OUTLOOK2007的迁移后,在办公层面,已经完成“微软”化了。其实真的不想这样,但是想MS在独霸桌面后࿰…

C#创建Windows服务
利用VS.NET创建C# Windows服务在很多应用中需要做windows服务来操作数据库等操作,比如 (1)一些非常慢的数据库操作,不想一次性去做,想慢慢的通过服务定时去做,比如定时为数据库备份等 (2&#x…

《深入理解计算机系统》第七章——链接知识点总结
目录 7.1编译器驱动程序 7.2静态链接 7.3目标文件 7.4可重定位目标文件 7.5符号和符号表 7.6符号解析 • 静态库(.a archive files) 7.1编译器驱动程序 7.2静态链接 7.3目标文件 7.4可重定位目标文件 使用readelf -S查看hello.o 一个典型的ELF可重定位目标文件包含以下…
排序算法之直接插入排序
1、基本思想: 已知待排序列r[1...n],先将序列中的第一个记录看成是一个有序的子序列,然后从第二个记录起逐个进行插入,直至整个序列变成关键字非递减有序序列为止。 具体操作如下: (1)查找出r[i]在有序序列…

【代码片段】如何使用CSS来快速定义多彩光标
对于web开发中,我们经常都看得到需要输入内容的组件和元素,比如,textarea,或者可编辑的DIV(contenteditable) ,如果你也曾思考过使用相关方式修改一下光标颜色的,那么这篇技术小分享,你绝对不应…

如何划分155MSDH带宽
我们单位拟计划租用运营商155MSDH电路,由于我们单位应用业务较多,为了避免各业务之间相互影响,更好地分享带宽,根据各业务数据量的大小,分别赋予一定的带宽,使各业务在自己的带宽内传输,但不知选…

慕课袁春风老师《计算机系统基础》一二三部分练习题
2.2 1、下列几种存储器中,( A )是易失性存储器。 A. cache B. EPROM C. Flash Memory D. CD-ROM 2、下面有关半导体存储器组织的叙述中,错误的是( D )。 A. 存储器的核心部分是存储阵列,…

47种常见的浏览器兼容性问题大汇总
浏览器兼容性问题大汇总 JavaScript 31. HTML对象获取问题 32. const问题 33. event.x与event.y问题 34. window.location.href问题 35. frame问题 36. 模态和非模态窗口问题 37. firefox与IE的父元素(parentElement)的区别 38. document.formName.item(”itemName”) 问题 39.…