当前位置:首页 » 课程大全 » 课程设计二栈和队列

课程设计二栈和队列

发布时间: 2021-03-13 23:29:05

㈠ 求数据结构 栈和队列的基本操作的编程

顺序栈代码如下
#pragma once
template<class T>
class SqStack
{
public:
SqStack(int m);
~SqStack();
void Clear();
bool IsEmpty()const;
int Length()const;
T& Top()const;
void Push(const T& e);
void Pop();
private:
T* m_base;
int m_top;
int m_size;
};

template<class T>
SqStack<T>::SqStack(int m)
{
m_top=0;
m_base=new T[m];
m_size=m;
}
template<class T>
SqStack<T>::~SqStack()
{
if(m_base!=NULL)
delete[] m_base;
}
template<class T>
void SqStack<T>::Clear()
{
m_top=0;
}
template<class T>
bool SqStack<T>::IsEmpty()const
{
return m_top==0;
}
template<class T>
int SqStack<T>::Length()const
{
return m_top;
}
template<class T>
T& SqStack<T>::Top()const
{
return m_base[m_top-1];
}
template<class T>
void SqStack<T>::Push(const T& e)
{
if(m_top>=m_size)
{
T* newbase;
newbase=new T[m_size+10];
for(int j=0;j<m_top;j++)
newbase[j]=m_base[j];
delete[] m_base;
m_base=newbase;
m_size+=10;
}
m_base[m_top++]=e;
}
template<class T>
void SqStack<T>::Pop()
{
m_top--;
}

#include<iostream>
#include"SqStack.h"

using namespace std;

int main()
{
SqStack<int> sq(5);
if(sq.IsEmpty())
cout<<"Now the stack is empty,its length is "<<sq.Length()<<endl;
cout<<"input the number you want to push into the stack:"<<endl;
int n,number;
cin>>n;
cout<<"input "<<n<<" numbers into the stack"<<endl;
for(int i=0;i<n;i++)
{
cin>>number;
sq.Push(number);
}
cout<<"Now the length is "<<sq.Length()<<endl;
cout<<"the top elememt is "<<sq.Top()<<endl;
sq.Pop();
cout<<"after popping a element,length is "<<sq.Length()<<endl;
cout<<"Now the top element is "<<sq.Top()<<endl;
sq.Clear();
cout<<"after clearing the stack,length is "<<sq.Length()<<endl;
cout<<"Good job!"<<endl;
system("pause");
return 0;
}

㈡ 数据结构课程设计报告中的技术讨论怎么写关于栈和队列的

晕/////真麻烦。。。。。

数据结构实习报告规范

实习报告的开头应给出题目、班级、姓名、学号和完成日期,并包括以下七个内容:

1、需求分析

以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定:

(1)输入的形式和输入值的范围;

(2)输出的形式;

(3)程序所能达到的功能;

(4)测试数据:包括正确地输入及其输出结果和含有错误的输入及其输出结果。

2、概要设计

说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。

3、详细设计

实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数的调用关系图。

4、调试分析

内容包括:

(1)调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;

(2)算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进思想;

(3)经验和体会等。

5、用户使用说明

说明如何使用你编写的程序,详细列出每一步操作步骤。

6、测试结果

列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。

7、附录

题 目 : [数据结构] 约瑟夫-实习报告
尺 寸 : 约瑟夫-实习报告.doc
目 录 : 一、需求分析
二、概要设计
三、程序具体设计及函数调用关系
四、调试分析
五、测试结果

原 文 : 实习报告

题目:约瑟夫(Joseph)问题的一种描述是:编号为1,2,......,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个开始重新从1报数,如此下去,直至年有人全部出列为止。试设计一个程序求出出列顺序。
班级: 姓名: 学号: 完成日期:

一、需求分析
1. 本演示程序中,利用单向循环链表存储结构存储约瑟夫环数据(即n个人的编号和密码)。
2. 演示程序以用户和计算机的对话方式执行,即在计算机终端上显示"提示信息"之后,由用户在键盘上输入演示程序中需要输入的数据,运算结果显示在其后。
3. 程序执行的命令包括:
1)构造单向循环链表;2)
4. 测试数据
m 的初值为20;n=7,7个人的密码依次为:3,1,7,2,4,8,4,首先m值为6(正确的出列顺序为6,1,4,7,2,1,3,5)。

二、概要设计
1.单向循环链表的抽象数据类型定义为:
ADT List{
数据对象:D={ai | ai∈正整数,I=1,2,......,n,n≥0}
数据关系:R1={< ai-1,ai > |,ai-1,ai∈D,I=1,2,......,n}
基本操作:
Init List(&L)
操作结果:构造一个空的线性表L。
List Insert(&L,i,e)
初始条件:线性表L已存在,1≤i≤List Length(L)+1.
操作结果:在L中第i个位置之前插入新的数据无素e,L长度加1。
List Delete(&L,i,&e)
初始条件:线性表L存在非空,1≤i≤List Length(L).
操作结果:删除L的第i个元素,并用e返回其值,L长度减1。
2. 程序包含四个模块:
1)主程序模块:

㈢ 栈和队列的操作特点分别是什么

1.队列先进先出,栈先进后出。
2.对插入和删除操作的"限定"。
栈是限定只能在表的一端进行插入和删除操作的线性表。 队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。
从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。但它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定"。
栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,栈必须按"后进先出"的规则进行操作,而队列必须按"先进先出"的规则进行操作。和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。

3.遍历数据速度不同。栈只能从头部取数据
也就最先放入的需要遍历整个栈最后才能取出来,而且在遍历数据的时候还得为数据开辟临时空间,保持数据在遍历前的一致性队列怎不同,他基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,因为在遍历的过程中不影像数据结构,速度要快的多

栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。
队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。
从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。但它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定"。

栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,栈必须按"后进先出"的规则进行操作,而队列必须按"先进先出"的规则进行操作。和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。可将线性表和栈及队列的插入和删除操作对比如下:


Insert(L,n+1,x)
Delete(L,n)
而栈只允许在表尾一端进行插入和删除

队列
Insert(L,n+1,x)
Delete(L,1)
队列只允许在表尾一端进行插入,在表头一端进行删除

㈣ 关于二级C语言公共基础知识 栈和队列 的两个问题

第一题这个不是C语言知识了,牵扯到了一些汇编。
你应该这样看存储空间(单元从低到高):
0
1
2
3
...
30 ← 栈顶
31
32
...
49 ← 栈底

第二题无法解答

㈤ 栈和队列的概念分别是什么

(1)栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。

(2)队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。

㈥ 数据结构编程题(栈与队列)

第一个:括号分左右括号,匹配的意思就是左右括号个数相等
int left=0,right=0,i=0;
char str[30]; //数组存放算术表达式
while(str[i]!='\0')
{
if(str[i]=='(') left++;

if(str[i]==')') right++;

i++;
}
if(left==right)
printf("匹配");

else
printf("不匹配");

第二个:迭代(从前往后)
int f(int n)
{
int front=0,back=1,sum=0;

for(i=2;i<=n;i++)

{

sum=front+back;

front=back;

back=sum;

}

return sum;

}
递归(从后往前)
int f(int n)
{
if(n==0)

return 0;
else if(n==1)

return 1;

else

reutrn f(n-1)+f(n-2);

}

㈦ 栈和队列 基本概念

队列:模拟排队,想一想就很清楚了;
栈:一个敞口的容器,你向里面一层一层地放东西,之后再从里面取出东西。

㈧ 栈和队列这两种数据结构的相同点和不同点

相同点:都是线性表
不同点:区别在于不同的读写方式,队列:按先进先出原则,出队入队操作发生在存储区的两端
堆栈:按后进先出原则,进栈出栈操作发生在存储区同一端

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919