数据结构(严蔚敏版)配套实验报告册--栈与队列基本操作

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2typedef int Status;
typedef char ElemType;#define STACK_INT_SIZE 100
#define STACKINCREMENT 10
//动态顺序栈
typedef struct
{ElemType *base;ElemType *top;int stacksize;
} SqStack;Status InitStack(SqStack &S)
{ //初始化一个空栈S.base = (ElemType *)malloc(STACK_INT_SIZE * sizeof(ElemType));if (!S.base)exit(OVERFLOW);S.top = S.base; //表示栈空S.stacksize = STACK_INT_SIZE;return OK;
}Status Push(SqStack &S, ElemType e)
{ //插入元素e为新的栈顶元素if (S.top - S.base >= S.stacksize){S.base = (ElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(ElemType));if (!S.base)exit(OVERFLOW);S.top = S.base + S.stacksize; //栈已满所以追加存储空间S.stacksize += STACKINCREMENT;}*(S.top++) = e;printf("S.base[%d]=%c\n", S.top - S.base, e);return OK;
}Status Pop(SqStack &S, ElemType &e)
{ //删除栈顶元素,用e返回其值if (S.top == S.base)return ERROR;e = *(S.top--); //先赋值元素,再将栈顶指针减一return OK;
}Status StackEmpty(SqStack S)
{if (S.top == S.base)return TRUE;elsereturn FALSE;
}ElemType GetTop(SqStack S)
{ //得到栈顶元素// ElemType e;if (S.top == S.base)exit(ERROR); // 不使用return ERROR 而使用exti()可以不论main()的返回值// e = *(S.top - 1);elsereturn *(S.top - 1);
}
//队列链式存储结构
typedef struct QNode
{ElemType data;struct QNode *next;
} QNode, *QueuePtr;typedef struct
{QueuePtr front;QueuePtr rear;
} LinkQueue;Status InitQueue(LinkQueue &Q)
{Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));if (!Q.front)exit(OVERFLOW);Q.front->next = NULL;return OK;
}
Status DestroyQueue(LinkQueue &Q)
{   if(!Q.front)return FALSE; while (Q.front){Q.rear = Q.front->next;free(Q.front);Q.front = Q.rear;}return OK;
}
Status EnQueue(LinkQueue &Q, ElemType e)
{//插入元素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(LinkQueue &Q, ElemType &e)
{//删除Q的队头元素,并用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;
}
Status LengthQueue(LinkQueue Q)
{//返回队列的长度int len = 0;QueuePtr p;p = Q.front->next;while (p){p = p->next;len++;}return len;
}ElemType GetheadQueue(LinkQueue Q)
{if (Q.front == Q.rear)exit(ERROR);elsereturn Q.front->next->data;
}
Status TraverLinkQueue(LinkQueue &Q)
{QueuePtr p;p = Q.front->next;while (p){printf("%2c", p->data);p = p->next;}printf("\n");return OK;
}int main()
{SqStack S;LinkQueue Q;ElemType ch, e1, e2;int state;InitStack(S);InitQueue(Q);printf("input a string edding by #:");scanf("%c", &ch);while (ch != '#'){Push(S, ch);EnQueue(Q, ch);scanf("%c", &ch);}
//    printf("\nThe Queue Head is:%c", GetheadQueue(Q));
//   printf("\nThe Queuelength is:%d",LengthQueue(Q));printf("\nThe Queue is:");TraverLinkQueue(Q);printf("\n");state = TRUE;while (!StackEmpty(S) && state){if (GetTop(S) == GetheadQueue(Q)){Pop(S, e1);DeQueue(Q, e2);}elsestate = FALSE;}if (state)printf("This string is HuiWen!\n");elseprintf("This string is not HuiWen!\n");
}

本次代码时间较紧没有太多注释,望读者认真阅读,有错误请指正。

数据结构实验(严蔚敏版)----栈与队列相关推荐

  1. 数据结构(严蔚敏版)循环队列——C语言

    大家好!我是一名二本学校努力的大二学生,正在努力学习数据结构,打算将其所有结构的源码写出与大家一起交流,期待与大家一起进步,互相成长!!! 循环队列 由一组地址连续的储存单元依次存放从队列头到队尾的元 ...

  2. [数据结构-严蔚敏版]P64循环队列-队列的顺序存储结构

    代码如下: #include <iostream> using namespace std;const int MAXQSIZE = 10;typedef int ElemType;typ ...

  3. 数据结构(严蔚敏)之五——循环队列(c语言实现)

    在这里我先强调几点概念: 1.在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置. 2.在单队列中我们判断队列是否为空的条件是:Q.front==Q.rear;而在循环队列 ...

  4. 基本排序算法 《数据结构》严蔚敏版

    根据在排序过程中记录所占用的存储设备,将排序分为: 1.内部排序  待排序记录存放在计算机内存中. 2.外部排序  待排序记录数量大,内存一次不能容纳全部记录,需要对外存进行访问. 内部排序分类: 1 ...

  5. 严蔚敏版《数据结构 (C语言版)》和《数据结构题集》(五)——栈和队列...

    栈的顺序表实现 1 #include <iostream> 2 #include <stdlib.h> 3 #include <stdio.h> 4 #define ...

  6. 严蔚敏版数据结构(C语言版)算法实现代码

    严蔚敏版数据结构(C语言版)算法实现代码 数据结构(C语言版)代码实现 线性表 顺序表 链表 单向链表 静态链表01 静态链表02 双向循环链表 栈与队列 栈 顺序栈 进制转换 行编辑器 未完待续.. ...

  7. 严蔚敏版《数据结构 (C语言版)》和《数据结构题集》(一)

    这里用的是严蔚敏版<数据结构 (C语言版)>和<数据结构题集>,深感自己的代码写得又渣又无力,打算把这本书好好琢磨透彻,里面的算法和模板都实现一遍,题目也都做一遍.最终能够做到 ...

  8. 数据结构(八) -- C语言版 -- 栈和队列 - 队列的设计与实现

    我让你知道我有啥 零.读前说明 一.队列的概述 二.队列的操作 三.队列的两种存储结构的模型概述 四.顺序存储结构的队列及实现 4.1.顺序存储结构的传统队列简易实现与测试 4.2.顺序存储结构的队列 ...

  9. 数据结构头文件《Fundamentals of Data Structures in C (2nd Edition) 》/严蔚敏版《数据结构》

    #ifndef _PUBLIC_H_ #define _PUBLIC_H_#include <malloc.h>//动态分配储存空间 #include <stdlib.h> # ...

最新文章

  1. 遗留应用现代化场景:如何正确使用RESTful API
  2. 解析java匿名内部类
  3. Atom JS 代码智能提示补全
  4. JUC队列-LinkedBlockingQueue(二)
  5. SQL 取n到m条记录
  6. 超级详细Ajax发送请求(接受提示信息或者返回参数)
  7. can总线学习(一)——初识can总线
  8. Java 算法 素数对猜想
  9. SQL--JOIN之完全用法
  10. Python的字符串格式化 %r %s
  11. 联想笔记本电脑键盘灯怎么开启_联想笔记本电脑wifi怎么连接 联想笔记本电脑键盘灯开启方法...
  12. html工资计算页面模板,工资计算表Excel模板
  13. android qq 登陆 简书,第三方登录 — QQ登录
  14. Ubuntu 安装网易云音乐
  15. python机器人编程教材_python人工智能机器人工具书籍: Learn Robotics Programming(python and Raspberry Pi 3) - 2018...
  16. 单元格下拉全选快捷键_wps表格怎么选中单元格,快捷键是什么?
  17. 洛杉矶凌晨4点-------启航
  18. 大国崛起(三) 大不列颠及北爱尔兰联合王国(英国)
  19. 仿古建筑为什么那么丑
  20. python操作键盘输入中文_python模拟鼠标点击和键盘输入的操作

热门文章

  1. html如何将网页分割开来,发现pdf文件页面内容太多,怎么把页面拆分开来?
  2. Cesium之地形(1)
  3. N! hdu 1042
  4. 【Vue3.0实战逐步深入系列】为问卷系统重新布局并添加登录及注销功能
  5. 【计算机网络】网络层:路由器的构成
  6. 洛谷P1008 [NOIP1998 普及组] 三连击题解
  7. 【plang 1.4.4】编写贪吃蛇脚本
  8. 管理员技术(二): 访问练习用虚拟机、 命令行基础技巧 、 挂载并访问光盘设备、ls列表及文档创建、复制删除移动...
  9. matlab line属性
  10. 漏洞修复:Often Misused: Weak SSL Certificate