﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Asterism的幻想空间-文章分类-C/C++</title><link>http://www.cppblog.com/asterism/category/4467.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 03:02:04 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 03:02:04 GMT</pubDate><ttl>60</ttl><item><title>图</title><link>http://www.cppblog.com/asterism/articles/25897.html</link><dc:creator>王禹然</dc:creator><author>王禹然</author><pubDate>Sat, 09 Jun 2007 04:47:00 GMT</pubDate><guid>http://www.cppblog.com/asterism/articles/25897.html</guid><wfw:comment>http://www.cppblog.com/asterism/comments/25897.html</wfw:comment><comments>http://www.cppblog.com/asterism/articles/25897.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/asterism/comments/commentRss/25897.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/asterism/services/trackbacks/25897.html</trackback:ping><description><![CDATA[<p>编程完成图的遍历实验，包括创建图，深度，遍历和广度遍历图，要求有输入和输出。<br>——————————————————————————<br>/*图的若干基本操作,Date:070607*/<br>/*Microsoft Visual C++ 6.0(SP6)编译通过*/</p>
<p>#include&lt;STDIO.H&gt;<br>#include&lt;STDLIB.H&gt;</p>
<p>#define MAX 100<br>#define MAX_VERTEX_NUM 20</p>
<p>#define CHAR 0<br>#if CHAR<br>&nbsp;&nbsp; typedef char VertexType;<br>&nbsp;&nbsp; #define form "%c"<br>#else<br>&nbsp;&nbsp; typedef int VertexType;<br>&nbsp;&nbsp; #define form "%d"<br>#endif</p>
<p>typedef struct ArcNode{<br>&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;adjvex;<br>&nbsp;struct ArcNode&nbsp;*nextarc;<br>&nbsp;/*InfoType&nbsp;&nbsp;*info;*/<br>}ArcNode;</p>
<p>typedef struct VNode{<br>&nbsp;VertexType&nbsp;&nbsp;data;<br>&nbsp;ArcNode&nbsp;&nbsp;&nbsp;*firstarc;<br>}VNode, AdjList[MAX_VERTEX_NUM];</p>
<p>typedef struct{<br>&nbsp;AdjList&nbsp;&nbsp;&nbsp;vertices;<br>&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;vexnum, arcnum;<br>&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;kind;<br>}ALGraph;</p>
<p>typedef enum {FALSE, TURE} Boolean;</p>
<p>void CreatALGraph(ALGraph *G)<br>{<br>&nbsp;int i, j, k;<br>&nbsp;ArcNode *s;</p>
<p>&nbsp;printf("请输入顶点数和边数:\n");<br>&nbsp;printf("vexnum = ");<br>&nbsp;scanf("%d",&amp;(G-&gt;vexnum));<br>&nbsp;printf("arcnum = ");<br>&nbsp;scanf("%d",&amp;(G-&gt;arcnum));<br>&nbsp;printf("请输入顶点信息:(输入格式:顶点号&lt;CR&gt;)\n");<br>&nbsp;for (i = 1; i &lt;= G-&gt;vexnum; i++)<br>&nbsp;{<br>&nbsp;&nbsp;scanf(form,&amp;(G-&gt;vertices[i].data));<br>&nbsp;&nbsp;G-&gt;vertices[i].firstarc = NULL;<br>&nbsp;}<br>&nbsp;printf("请输入边的信息:(输入格式:i,j)\n");<br>&nbsp;for (k = 1; k &lt;= G-&gt;arcnum; k++)<br>&nbsp;{<br>&nbsp;&nbsp;scanf("%d,%d",&amp;i,&amp;j);<br>&nbsp;&nbsp;s = (ArcNode*)malloc(sizeof(ArcNode));<br>&nbsp;&nbsp;s-&gt;adjvex = j;<br>&nbsp;&nbsp;s-&gt;nextarc = G-&gt;vertices[i].firstarc;<br>&nbsp;&nbsp;G-&gt;vertices[i].firstarc = s;<br>&nbsp;}<br>}</p>
<p>void DFS(ALGraph *G, int v, int visited[])<br>{<br>&nbsp;ArcNode&nbsp;*w;<br>&nbsp;int&nbsp;&nbsp;i;</p>
<p>&nbsp;printf("%d&nbsp; ",v);<br>&nbsp;visited[v] = TURE;<br>&nbsp;w = G-&gt;vertices[v].firstarc;<br>&nbsp;while(w != NULL)<br>&nbsp;{<br>&nbsp;&nbsp;i = w-&gt;adjvex;<br>&nbsp;&nbsp;if(visited[i] == FALSE)<br>&nbsp;&nbsp;&nbsp;DFS(G, i, visited);<br>&nbsp;&nbsp;w = w-&gt;nextarc;<br>&nbsp;}<br>}</p>
<p>void DFSTraverse(ALGraph *G, int n)<br>{<br>&nbsp;int i;<br>&nbsp;static Boolean visited[MAX];<br>&nbsp;<br>&nbsp;for(i = 1; i &lt;= n; i++)<br>&nbsp;&nbsp;visited[i] = FALSE;<br>&nbsp;for(i = 1; i &lt;= n; i++)<br>&nbsp;&nbsp;if(visited[i] == FALSE)<br>&nbsp;&nbsp;&nbsp;DFS(G, i, visited);<br>}</p>
<p>void BFS(ALGraph *G, int v, int visited[])<br>{<br>&nbsp;int queue[MAX], f=0, r=0;<br>&nbsp;ArcNode *p;</p>
<p>&nbsp;printf("%d&nbsp; ",v);<br>&nbsp;visited[v] = TURE;<br>&nbsp;queue[0] = v;<br>&nbsp;while(f &lt;= r)<br>&nbsp;{<br>&nbsp;&nbsp;v = queue[f++];<br>&nbsp;&nbsp;p = G-&gt;vertices[v].firstarc;<br>&nbsp;&nbsp;while(p != NULL)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;v = p-&gt;adjvex;<br>&nbsp;&nbsp;&nbsp;if(visited[v] == FALSE)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;visited[v] = TURE;<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("%d&nbsp; ",v);<br>&nbsp;&nbsp;&nbsp;&nbsp;queue[++r]=v;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;p = p-&gt;nextarc;<br>&nbsp;&nbsp;}<br>&nbsp;}<br>}</p>
<p>void BFSTraverse(ALGraph *G, int n)<br>{<br>&nbsp;int i;<br>&nbsp;static int visited[MAX];</p>
<p>&nbsp;for(i = 1; i &lt;= n; i++)<br>&nbsp;&nbsp;visited[i] = FALSE;<br>&nbsp;for(i = 1; i &lt;= n; i++)<br>&nbsp;&nbsp;if(visited[i] == FALSE)<br>&nbsp;&nbsp;&nbsp;BFS(G, i, visited);&nbsp;&nbsp; <br>}</p>
<p>void main(void)<br>{<br>&nbsp;ALGraph G;</p>
<p>&nbsp;CreatALGraph(&amp;G);<br>&nbsp;printf("DFS:&nbsp; ");<br>&nbsp;DFSTraverse(&amp;G, G.vexnum);<br>&nbsp;printf("\nBFS:&nbsp; ");<br>&nbsp;BFSTraverse(&amp;G, G.vexnum);<br>}</p><img src ="http://www.cppblog.com/asterism/aggbug/25897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/asterism/" target="_blank">王禹然</a> 2007-06-09 12:47 <a href="http://www.cppblog.com/asterism/articles/25897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二叉树</title><link>http://www.cppblog.com/asterism/articles/25896.html</link><dc:creator>王禹然</dc:creator><author>王禹然</author><pubDate>Sat, 09 Jun 2007 04:46:00 GMT</pubDate><guid>http://www.cppblog.com/asterism/articles/25896.html</guid><wfw:comment>http://www.cppblog.com/asterism/comments/25896.html</wfw:comment><comments>http://www.cppblog.com/asterism/articles/25896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/asterism/comments/commentRss/25896.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/asterism/services/trackbacks/25896.html</trackback:ping><description><![CDATA[<p>分别采用递归和非递归方法，实现二叉树的链表存储，实现的基本操作函数(包括二叉树的建立，释放，中序遍历，输出，测深度)。<br>——————————————————————————<br>/*二叉树的若干基本操作,Date:070513*/<br>/*Microsoft Visual C++ 6.0(SP6)编译通过*/</p>
<p>#include&lt;STDIO.H&gt;<br>#include&lt;STDLIB.H&gt;</p>
<p>#define OK 1<br>#define ERROR 0<br>#define MAX&nbsp; 50<br>#define MAS&nbsp; 20</p>
<p>/*预编译,若二叉树数据为字符,CHAR为1;若二叉树数据为整数,CHAR为0*/<br>#define CHAR 1<br>#if CHAR<br>&nbsp;&nbsp; typedef char TElemType;<br>&nbsp;&nbsp; TElemType Nil=' ';<br>&nbsp;&nbsp; #define form "%c"<br>#else<br>&nbsp;&nbsp; typedef int TElemType;<br>&nbsp;&nbsp; TElemType Nil=0;<br>&nbsp;&nbsp; #define form "%d"<br>#endif</p>
<p>typedef struct BiTNode{<br>&nbsp;TElemType data;<br>&nbsp;struct BiTNode *lchild, *rchild, *parent;<br>}BiTNode, *BiTree;</p>
<p>int InitBiTree(BiTree T)<br>{<br>&nbsp;if ((T=(BiTNode*)malloc(sizeof(BiTNode))) == NULL)<br>&nbsp;&nbsp;return ERROR;<br>&nbsp;T-&gt;lchild = NULL;<br>&nbsp;T-&gt;rchild = NULL;<br>&nbsp;return OK;<br>}</p>
<p>BiTNode *CreateBiTree(BiTNode *T)<br>{<br>&nbsp;TElemType ch;</p>
<p>&nbsp;scanf(form,&amp;ch);<br>&nbsp;if (ch == Nil)<br>&nbsp;&nbsp;T = NULL;<br>&nbsp;else<br>&nbsp;{<br>&nbsp;&nbsp;T = (BiTNode *)malloc(sizeof(BiTNode));<br>&nbsp;&nbsp;if(T == NULL)<br>&nbsp;&nbsp;&nbsp;exit(0);<br>&nbsp;&nbsp;T-&gt;data = ch;<br>&nbsp;&nbsp;T-&gt;parent = NULL;<br>&nbsp;&nbsp;T-&gt;lchild = CreateBiTree(T-&gt;lchild);<br>&nbsp;&nbsp;if(T-&gt;lchild)<br>&nbsp;&nbsp;&nbsp;T-&gt;lchild-&gt;parent = T;<br>&nbsp;&nbsp;T-&gt;rchild = CreateBiTree(T-&gt;rchild);<br>&nbsp;&nbsp;if(T-&gt;rchild)<br>&nbsp;&nbsp;&nbsp;T-&gt;rchild-&gt;parent = T;<br>&nbsp;}<br>&nbsp;return T;<br>}</p>
<p>void DestroyBiTreeRecursion(BiTree T)<br>{<br>&nbsp;if (T == NULL)<br>&nbsp;&nbsp;return;<br>&nbsp;DestroyBiTreeRecursion(T-&gt;lchild);<br>&nbsp;DestroyBiTreeRecursion(T-&gt;rchild);<br>&nbsp;free(T);<br>}</p>
<p>int DestroyBiTreeNoRecursion(BiTree T)<br>{<br>&nbsp;BiTNode *p = T, *temp = T, *stack[MAS];<br>&nbsp;int top = 0;<br>&nbsp;<br>&nbsp;if (T == NULL)<br>&nbsp;{<br>&nbsp;&nbsp;return ERROR;<br>&nbsp;&nbsp;exit(0);<br>&nbsp;}<br>&nbsp;while (top!=0 || temp!=NULL)<br>&nbsp;{<br>&nbsp;&nbsp;p = temp;<br>&nbsp;&nbsp;while (p != NULL)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;stack[top] = p;<br>&nbsp;&nbsp;&nbsp;top++;<br>&nbsp;&nbsp;&nbsp;p = p-&gt;lchild;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if (top != 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;p = stack[top-1];<br>&nbsp;&nbsp;&nbsp;top--;<br>&nbsp;&nbsp;&nbsp;temp = p-&gt;rchild;<br>&nbsp;&nbsp;&nbsp;free(p);<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;T = NULL;<br>&nbsp;return OK;<br>}</p>
<p>void PrintTree(BiTNode *T, int i)<br>{<br>&nbsp;if (T!=NULL)<br>&nbsp;{<br>&nbsp;&nbsp;PrintTree(T-&gt;rchild,i+5);<br>&nbsp;&nbsp;#if CHAR<br>&nbsp;&nbsp;&nbsp;if (T-&gt;data!=Nil)<br>&nbsp;&nbsp;&nbsp;printf("%*c\n",i,T-&gt;data);<br>&nbsp;&nbsp;#else<br>&nbsp;&nbsp;&nbsp;if (T-&gt;data!=Nil)<br>&nbsp;&nbsp;&nbsp;printf("%*d\n",i,T-&gt;data);<br>&nbsp;&nbsp;#endif<br>&nbsp;&nbsp;PrintTree(T-&gt;lchild,i+5);<br>&nbsp;&nbsp;i = i-5;<br>&nbsp;}<br>}</p>
<p>void visit(TElemType e)<br>{<br>&nbsp;printf(form" ",e);<br>}</p>
<p>void InOrderTraverseRecursion(BiTree T)<br>{<br>&nbsp;if (T == NULL)<br>&nbsp;&nbsp;return;<br>&nbsp;InOrderTraverseRecursion(T-&gt;lchild);<br>&nbsp;visit(T-&gt;data);<br>&nbsp;InOrderTraverseRecursion(T-&gt;rchild);<br>}</p>
<p>void InOrderTraverseStack(BiTree T, void(*visit)(TElemType))<br>{<br>&nbsp;BiTNode *p = T, *stack[MAS];<br>&nbsp;int top = 0;</p>
<p>&nbsp;while (top!=0 || p!=NULL)<br>&nbsp;{<br>&nbsp;&nbsp;while (p != NULL)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;stack[top] = p;<br>&nbsp;&nbsp;&nbsp;top++;<br>&nbsp;&nbsp;&nbsp;p = p-&gt;lchild;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if (top != 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;p = stack[top-1];<br>&nbsp;&nbsp;&nbsp;top--;<br>&nbsp;&nbsp;&nbsp;visit(p-&gt;data);<br>&nbsp;&nbsp;&nbsp;p = p-&gt;rchild;<br>&nbsp;&nbsp;}<br>&nbsp;}<br>}</p>
<p>int BiTreeDepth(BiTree T)<br>{<br>&nbsp;int&nbsp; u, v;<br>&nbsp;<br>&nbsp;if (T == NULL)<br>&nbsp;&nbsp;return 0;<br>&nbsp;u = BiTreeDepth(T-&gt;lchild);<br>&nbsp;v = BiTreeDepth(T-&gt;rchild);<br>&nbsp;if (u &gt; v)<br>&nbsp;&nbsp;return (u+1);<br>&nbsp;return (v+1);<br>}</p>
<p>void main(void)<br>{<br>&nbsp;int i;<br>&nbsp;BiTree T = NULL;</p>
<p>CREATE:&nbsp;InitBiTree(T);<br>&nbsp;#if CHAR<br>&nbsp;&nbsp;printf("按先序输入二叉树(如:AB&nbsp;&nbsp; 表示A为根结点,B为左子树的二叉树)\n");<br>&nbsp;#else<br>&nbsp;&nbsp;printf("按先序输入二叉树(如:12000表示1为根结点,2为左子树的二叉树)\n");<br>&nbsp;#endif<br>&nbsp;T = CreateBiTree(T);<br>&nbsp;printf("建立的二叉树为:\n");<br>&nbsp;PrintTree(T,5);<br>&nbsp;do{<br>&nbsp;&nbsp;printf("------------------------------------------");<br>&nbsp;&nbsp;printf("\n&nbsp;&nbsp;&nbsp;&nbsp; 命令菜单");<br>&nbsp;&nbsp;printf("\n&nbsp; 1&nbsp; 重新建立二叉树");<br>&nbsp;&nbsp;printf("\n&nbsp; 2&nbsp; 二叉树的释放(递归)");<br>&nbsp;&nbsp;printf("\n&nbsp; 3&nbsp; 二叉树的释放(非递归)");<br>&nbsp;&nbsp;printf("\n&nbsp; 4&nbsp; 二叉树的深度(递归)");<br>&nbsp;&nbsp;printf("\n&nbsp; 5&nbsp; 二叉树中序遍历(递归)");<br>&nbsp;&nbsp;printf("\n&nbsp; 6&nbsp; 二叉树中序遍历(非递归)");<br>&nbsp;&nbsp;printf("\n&nbsp; 0&nbsp;&nbsp;&nbsp; 退出");<br>&nbsp;&nbsp;printf("\n------------------------------------------");<br>&nbsp;&nbsp;printf("\n");<br>&nbsp;&nbsp;printf("输入命令:");<br>&nbsp;&nbsp;scanf("%d",&amp;i);<br>&nbsp;&nbsp;switch(i)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;case 1:<br>&nbsp;&nbsp;&nbsp;if (T != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;DestroyBiTreeNoRecursion(T);<br>&nbsp;&nbsp;&nbsp;&nbsp;goto CREATE;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;goto CREATE;<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;case 2:<br>&nbsp;&nbsp;&nbsp;if (T != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;DestroyBiTreeRecursion(T);<br>&nbsp;&nbsp;&nbsp;&nbsp;T = NULL;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("二叉树不存在,无法释放!\n");<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;case 3:<br>&nbsp;&nbsp;&nbsp;if (T != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;DestroyBiTreeNoRecursion(T);<br>&nbsp;&nbsp;&nbsp;&nbsp;T = NULL;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("二叉树不存在,无法释放!\n");<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;case 4:<br>&nbsp;&nbsp;&nbsp;if (T != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("二叉树的深度为:");<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",BiTreeDepth(T));<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("二叉树不存在,无法侧深度!\n");<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;case 5:<br>&nbsp;&nbsp;&nbsp;if (T != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("中序遍历(递归)结果为:\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;InOrderTraverseRecursion(T);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("二叉树不存在,无法遍历!\n");<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;case 6:<br>&nbsp;&nbsp;&nbsp;if (T != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("中序遍历(非递归)结果为:\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;InOrderTraverseStack(T, visit);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("二叉树不存在,无法遍历!\n");<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;case 0:<br>&nbsp;&nbsp;&nbsp;exit(0);<br>&nbsp;&nbsp;default:<br>&nbsp;&nbsp;&nbsp;printf("命令参数有误!\n");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;printf("\n");<br>&nbsp;}while(i&gt;0&amp;&amp;i&lt;7);<br>}</p><img src ="http://www.cppblog.com/asterism/aggbug/25896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/asterism/" target="_blank">王禹然</a> 2007-06-09 12:46 <a href="http://www.cppblog.com/asterism/articles/25896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>队列</title><link>http://www.cppblog.com/asterism/articles/25895.html</link><dc:creator>王禹然</dc:creator><author>王禹然</author><pubDate>Sat, 09 Jun 2007 04:45:00 GMT</pubDate><guid>http://www.cppblog.com/asterism/articles/25895.html</guid><wfw:comment>http://www.cppblog.com/asterism/comments/25895.html</wfw:comment><comments>http://www.cppblog.com/asterism/articles/25895.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/asterism/comments/commentRss/25895.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/asterism/services/trackbacks/25895.html</trackback:ping><description><![CDATA[<p>采用链队设计一个算法，反应病人看病、排队看医生的情况，在病人排队过程当中，主要重复两件事情：<br>&#8211;(1)病人到达诊室，将病历本交给护士，排到等待队列中候诊；<br>&#8211;(2)护士从等待队列中去除下一位病人的病历，该病人进入诊室就诊。<br>要求模拟病人等待就诊这一过程。程序采用菜单方式，下面将其选项及功能进行说明：<br>&#8211;1，排队，输入派对病人的病历号，加入到病人排队队列中；<br>&#8211;2，就诊，病人排队队列中最前面的病人就诊，并将其从队列中删除；<br>&#8211;3，查看排队，从对首到队尾列出所有的排队病人的病历号；<br>&#8211;4，不再排队，余下依次就诊，从对首到队尾列出所有的排队病人的病历号，并退出运行；<br>&#8211;5，下班，退出运行。<br>——————————————————————————<br>/*链队列的若干基本操作,Date:070412*/<br>/*Microsoft Visual C++ 6.0(SP6)编译通过*/</p>
<p>#include&lt;STDLIB.H&gt;<br>#include&lt;STDIO.H&gt;<br>#include&lt;STRING.H&gt;<br>#define OK 1<br>#define ERROR 0</p>
<p>typedef struct QNode{<br>&nbsp;int case_num;<br>&nbsp;struct QNode *next;<br>}QNode, *QueuePtr;</p>
<p>typedef struct{<br>&nbsp;QueuePtr front;<br>&nbsp;QueuePtr rear;<br>}LinkQueue;</p>
<p>QNode *InitQueue(LinkQueue *Q)<br>{<br>&nbsp;Q-&gt;front = Q-&gt;rear = (QueuePtr)malloc(sizeof(QNode));<br>&nbsp;if (!Q-&gt;front)<br>&nbsp;&nbsp;return NULL;<br>&nbsp;else<br>&nbsp;{<br>&nbsp;&nbsp;Q-&gt;front-&gt;next = NULL;<br>&nbsp;&nbsp;return Q-&gt;front;<br>&nbsp;}<br>}</p>
<p>int DestroyQueue(LinkQueue *Q)<br>{<br>&nbsp;while (Q-&gt;front)<br>&nbsp;{<br>&nbsp;&nbsp;Q-&gt;rear = Q-&gt;front-&gt;next;<br>&nbsp;&nbsp;free(Q-&gt;front);<br>&nbsp;&nbsp;Q-&gt;front = Q-&gt;rear;<br>&nbsp;}<br>&nbsp;return OK;<br>}</p>
<p>int EnQueue(LinkQueue *Q, int num)<br>{<br>&nbsp;QNode *p;</p>
<p>&nbsp;p = (QueuePtr)malloc(sizeof(QNode));<br>&nbsp;if (!p)<br>&nbsp;&nbsp;return ERROR;<br>&nbsp;else<br>&nbsp;{<br>&nbsp;&nbsp;p-&gt;case_num = num;<br>&nbsp;&nbsp;p-&gt;next = NULL;<br>&nbsp;&nbsp;Q-&gt;rear-&gt;next = p;<br>&nbsp;&nbsp;Q-&gt;rear = p;<br>&nbsp;&nbsp;return OK;<br>&nbsp;}<br>}</p>
<p>int DeQueue(LinkQueue *Q, int *num)<br>{<br>&nbsp;QNode *p;<br>&nbsp;<br>&nbsp;if (Q-&gt;front == Q-&gt;rear)<br>&nbsp;&nbsp;return ERROR;<br>&nbsp;p = Q-&gt;front-&gt;next;<br>&nbsp;*num = p-&gt;case_num;<br>&nbsp;Q-&gt;front-&gt;next = p-&gt;next;<br>&nbsp;if (Q-&gt;rear == p)<br>&nbsp;&nbsp;Q-&gt;rear = Q-&gt;front;<br>&nbsp;free(p);<br>&nbsp;return OK;<br>}</p>
<p>int PrintQueue(LinkQueue *Q)<br>{<br>&nbsp;QNode *p;</p>
<p>&nbsp;p = Q-&gt;front-&gt;next;<br>&nbsp;while (p != Q-&gt;rear)<br>&nbsp;{<br>&nbsp;&nbsp;printf("%d\t",p-&gt;case_num);<br>&nbsp;&nbsp;p = p-&gt;next;<br>&nbsp;}<br>&nbsp;printf("%d",Q-&gt;rear-&gt;case_num);<br>&nbsp;printf("\n");<br>&nbsp;return OK;<br>}</p>
<p>void main(void)<br>{<br>&nbsp;QNode *p = NULL;<br>&nbsp;LinkQueue Q;<br>&nbsp;char cmd[10] = {0};<br>&nbsp;int num = 0;<br>&nbsp;<br>&nbsp;while (1)<br>&nbsp;{<br>&nbsp;&nbsp;printf("输入对病人队列的操作命令:\n\t如:创建creat,增加queue,就诊start,停止stop,下班quit\n");<br>&nbsp;&nbsp;scanf("%s",&amp;cmd);<br>&nbsp;&nbsp;if (strcmp(cmd, "creat") == 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;p = InitQueue(&amp;Q);<br>&nbsp;&nbsp;&nbsp;if (p != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("依次输入已排队病人的病历号:以'0'作为结尾\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;num);<br>&nbsp;&nbsp;&nbsp;&nbsp;while (num != 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnQueue(&amp;Q, num);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;num);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;PrintQueue(&amp;Q);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("队列初始化失败!\n");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if (strcmp(cmd, "queue") == 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if (p != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("输入队列中新增病人的病历号:");<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;num);<br>&nbsp;&nbsp;&nbsp;&nbsp;EnQueue(&amp;Q, num);<br>&nbsp;&nbsp;&nbsp;&nbsp;PrintQueue(&amp;Q);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("队列未初始化!\n");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if (strcmp(cmd, "start") == 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if (p != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;DeQueue(&amp;Q, &amp;num);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("病历号为%d的病人就诊后的队列:\n",num);<br>&nbsp;&nbsp;&nbsp;&nbsp;PrintQueue(&amp;Q);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("队列未初始化!\n");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if (strcmp(cmd, "stop") == 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if (p != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("停止增加排队后的队列:\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;PrintQueue(&amp;Q);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("队列未初始化!\n");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if (strcmp(cmd, "quit") == 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if (p != NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;DestroyQueue(&amp;Q);<br>&nbsp;&nbsp;&nbsp;return;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;printf("输入的命令有误!\n");<br>&nbsp;}<br>}</p><img src ="http://www.cppblog.com/asterism/aggbug/25895.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/asterism/" target="_blank">王禹然</a> 2007-06-09 12:45 <a href="http://www.cppblog.com/asterism/articles/25895.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单链表</title><link>http://www.cppblog.com/asterism/articles/25894.html</link><dc:creator>王禹然</dc:creator><author>王禹然</author><pubDate>Sat, 09 Jun 2007 04:44:00 GMT</pubDate><guid>http://www.cppblog.com/asterism/articles/25894.html</guid><wfw:comment>http://www.cppblog.com/asterism/comments/25894.html</wfw:comment><comments>http://www.cppblog.com/asterism/articles/25894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/asterism/comments/commentRss/25894.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/asterism/services/trackbacks/25894.html</trackback:ping><description><![CDATA[<p>实现单链表的基本操作，包括链表的建立，释放，查找，插入，删除等函数，要求同时具备输入输出功能。<br>——————————————————————————<br>/*单链表的若干基本操作,Date:070325*/<br>/*Microsoft Visual C++ 6.0(SP6)编译通过*/</p>
<p>#include&lt;STDIO.H&gt;<br>#include&lt;STRING.H&gt;<br>#include&lt;STDLIB.H&gt;</p>
<p>typedef struct list{<br>&nbsp;int data;<br>&nbsp;struct list *next;<br>}LD;</p>
<p>LD *creat(int *size)<br>{<br>&nbsp;LD *head;<br>&nbsp;LD *p1,*p2;</p>
<p>&nbsp;*size = 0;<br>&nbsp;printf("输入数据并以'-1'作为结束标志:\n");<br>&nbsp;p1=p2=(LD*)malloc(sizeof(LD));<br>&nbsp;head = NULL;<br>&nbsp;while (p1-&gt;data != -1)<br>&nbsp;{<br>&nbsp;&nbsp;(*size)++;<br>&nbsp;&nbsp;if (*size == 1)<br>&nbsp;&nbsp;&nbsp;head = p1;<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;p2-&gt;next = p1;<br>&nbsp;&nbsp;p2 = p1;<br>&nbsp;&nbsp;p1 = (LD*)malloc(sizeof(LD));<br>&nbsp;&nbsp;scanf("%d",&amp;p1-&gt;data);<br>&nbsp;}<br>&nbsp;p2-&gt;next = NULL;<br>&nbsp;(*size)--;<br>&nbsp;return head;<br>}</p>
<p>LD *find(LD *head, int num)<br>{<br>&nbsp;int find_num;<br>&nbsp;LD *p;</p>
<p>&nbsp;p = head;<br>&nbsp;for (find_num = 0; p-&gt;next != NULL; find_num++)<br>&nbsp;{<br>&nbsp;&nbsp;if (find_num != num)<br>&nbsp;&nbsp;&nbsp;p = p-&gt;next;<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;return p;<br>&nbsp;}<br>&nbsp;if ((p-&gt;next == NULL) &amp;&amp; ((find_num--) == num))<br>&nbsp;&nbsp;return p;<br>&nbsp;else<br>&nbsp;{<br>&nbsp;&nbsp;printf("超出链表范围!");<br>&nbsp;&nbsp;p = NULL;<br>&nbsp;&nbsp;return p;<br>&nbsp;}<br>}</p>
<p>void insert(LD *p, int insert_data, int *size)<br>{<br>&nbsp;LD *new_data;</p>
<p>&nbsp;new_data = (LD*)malloc(sizeof(LD));<br>&nbsp;new_data-&gt;data = insert_data;<br>&nbsp;new_data-&gt;next = p-&gt;next;<br>&nbsp;p-&gt;next = new_data;<br>&nbsp;(*size)++;<br>}</p>
<p>void del(LD *head, LD *p, int num, int *size)<br>{<br>&nbsp;LD *p0;<br>&nbsp;<br>&nbsp;p0 = find(head,num-1);<br>&nbsp;p0-&gt;next = p-&gt;next;<br>&nbsp;free(p);<br>&nbsp;(*size)--;<br>}</p>
<p>void print(LD *head)<br>{<br>&nbsp;LD *p;</p>
<p>&nbsp;printf("链表数据:");<br>&nbsp;p = head-&gt;next;<br>&nbsp;if (head != NULL)<br>&nbsp;&nbsp;do{<br>&nbsp;&nbsp;&nbsp;printf("%d\t",p-&gt;data);<br>&nbsp;&nbsp;&nbsp;p = p-&gt;next;<br>&nbsp;&nbsp;}while (p != NULL);<br>&nbsp;printf("\n");<br>}</p>
<p>void main(void)<br>{<br>&nbsp;char s[10] = {0};<br>&nbsp;int size = 0;<br>&nbsp;int num = 0;<br>&nbsp;int insert_data = 0;<br>&nbsp;LD *head = NULL, *p, *temp;</p>
<p>&nbsp;while(1)<br>&nbsp;{<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;printf("输入对单链表操作的命令:(如:creat, free, find, insert or delete)\n");<br>&nbsp;&nbsp;scanf("%s",&amp;s);<br>&nbsp;&nbsp;if (strcmp(s,"creat") == 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;head = creat(&amp;size);<br>&nbsp;&nbsp;&nbsp;if (head != NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;print(head);<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("初始化链表失败!\n");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if (strcmp(s,"free") == 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if (head != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;temp = (LD*)malloc(sizeof(LD));<br>&nbsp;&nbsp;&nbsp;&nbsp;for (p = head; p-&gt;next != NULL; p = temp-&gt;next)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp-&gt;next = p-&gt;next;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(p);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size--;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;free(p);<br>&nbsp;&nbsp;&nbsp;&nbsp;size--;<br>&nbsp;&nbsp;&nbsp;&nbsp;free(temp);<br>&nbsp;&nbsp;&nbsp;&nbsp;print(head);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("链表不存在,无法进行查找操作!\n");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if (strcmp(s,"find") == 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if (head != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("输入查找节点的序号:");<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;num);<br>&nbsp;&nbsp;&nbsp;&nbsp;p = find(head,num);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("查找的节点数据为:%d\n",p-&gt;data);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("链表不存在,无法进行查找操作!\n");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if (strcmp(s,"insert") == 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if (head != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("输入插入的数据:");<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;insert_data);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("输入插入节点的前驱节点序号:");<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;num);<br>&nbsp;&nbsp;&nbsp;&nbsp;p = find(head,num);<br>&nbsp;&nbsp;&nbsp;&nbsp;if (p != NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(p,insert_data,&amp;size);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(head);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("链表不存在,无法进行插入操作!\n");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if (strcmp(s,"delete") == 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if (head != NULL)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("删除节点的序号:");<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;num);<br>&nbsp;&nbsp;&nbsp;&nbsp;p = find(head,num);<br>&nbsp;&nbsp;&nbsp;&nbsp;if (p != NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;del(head,p,num,&amp;size);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(head);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("链表不存在,无法进行删除操作!\n");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;printf("输入的命令参数有误!\n");<br>&nbsp;&nbsp;printf("链表节点总数:%d\n",size);<br>&nbsp;}<br>}<br></p><img src ="http://www.cppblog.com/asterism/aggbug/25894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/asterism/" target="_blank">王禹然</a> 2007-06-09 12:44 <a href="http://www.cppblog.com/asterism/articles/25894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大二数据结构历次作业</title><link>http://www.cppblog.com/asterism/articles/25893.html</link><dc:creator>王禹然</dc:creator><author>王禹然</author><pubDate>Sat, 09 Jun 2007 04:43:00 GMT</pubDate><guid>http://www.cppblog.com/asterism/articles/25893.html</guid><wfw:comment>http://www.cppblog.com/asterism/comments/25893.html</wfw:comment><comments>http://www.cppblog.com/asterism/articles/25893.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/asterism/comments/commentRss/25893.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/asterism/services/trackbacks/25893.html</trackback:ping><description><![CDATA[初次来到cppblog，没有什么太多经验与特长，将自己大二数据结构的作业贴在这儿，一来纪念自己的大二生活，二来与学长学弟们交流，共勉！<br>————————————<br>同时永远怀恋我的同学马玎！<img src ="http://www.cppblog.com/asterism/aggbug/25893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/asterism/" target="_blank">王禹然</a> 2007-06-09 12:43 <a href="http://www.cppblog.com/asterism/articles/25893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>