課程設計二棧和隊列
㈠ 求數據結構 棧和隊列的基本操作的編程
順序棧代碼如下
#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);
}
㈦ 棧和隊列 基本概念
隊列:模擬排隊,想一想就很清楚了;
棧:一個敞口的容器,你向裡面一層一層地放東西,之後再從裡面取出東西。
㈧ 棧和隊列這兩種數據結構的相同點和不同點
相同點:都是線性表
不同點:區別在於不同的讀寫方式,隊列:按先進先出原則,出隊入隊操作發生在存儲區的兩端
堆棧:按後進先出原則,進棧出棧操作發生在存儲區同一端