大二資料結構學習3(棧和佇列)
棧和佇列
棧
一 定義
1.棧:限定僅在表尾進行插入或刪除操作的線性表
2 棧底固定不變,後進先出
二 程式碼結構
【1】靜態分佈
typedef struct link//定義一個棧
{
ElemType elem[maxleng];//棧中的資料
int top;//棧的頭結點
}sqstack;
【2】動態分佈
#define maxleng 100//限定棧的最長長度
typedef int ElemType;//用ElemType代替int型別
typedef struct link//定義一個棧
{
ElemType elem[maxleng];//棧中的資料
int top;//棧的頭結點
}sqstack;
【3】初始化
void initstack(sqstack &s)//初始化棧,讓top指向頭
{
s.top=0;
}
【4】入棧
int seg_push(sqstack &s,ElemType e)//入棧
{
if(s.top>maxleng)
{
cout<<"滿了"<< endl;
return 1;
}
s.elem[s.top]=e;
s.top++;
return 1;
}
【5】出棧
void seg_pop(sqstack &s)//出棧
{
while(s.top!=0)
{
printf("%d",s.elem[s.top-1]);
s.top--;
}
}
【6】建立完整棧,實現入棧出棧
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define maxleng 100//限定棧的最長長度
typedef int ElemType;//用ElemType代替int型別
typedef struct link//定義一個棧
{
ElemType elem[maxleng];//棧中的資料
int top;//棧的頭結點
}sqstack;
void initstack(sqstack &s)//初始化棧,讓top指向頭
{
s.top=0;
}
int seg_push(sqstack &s,ElemType e)//入棧
{
if(s.top>maxleng)
{
cout<<"滿了"<< endl;
return 1;
}
s.elem[s.top]=e;
s.top++;
return 1;
}
void seg_pop(sqstack &s)//出棧
{
while(s.top!=0)
{
printf("%d",s.elem[s.top-1]);
s.top--;
}
}
int main()//主函式
{ int n,m,j,e;
scanf("%d",&n);
sqstack s;
initstack(s);
for(int i=0;i<n;i++)
{
scanf("%d",&e);
seg_push(s,e);
}
/*if(s.top==0)
printf("error!!");
else
for(int i=0;i<n;i++)
{
printf("%d",s.elem[s.top-1]);
s.top--;
}*/
Seg_pop(s);
return 0;
}
鏈棧
一 定義
1.棧的鏈式儲存結構為鏈棧
2.他的運算是受限的單連結串列,其插入和刪除操作僅限制在表頭位置上進行,由於智慧在連結串列 頭部進行操作,故連結串列沒有必要像單連結串列那樣附加頭結點。棧的頂指標就是連結串列的頭指標
二 結構程式碼
【1】建立結構
#define maxleng 100
typedef int ElemType;
typedef struct link
{
ElemType elem;
struct link *next;
}* linkstack;
【2】初始化
void initstack (linkstack &s)
{
s=NULL;
}
【3】入棧
void push_link(linkstack &s,ElemType e)
{
linkstack p;
p=new link;
p->elem=e;
p->next=s;
s=p;
}
【4】出棧
void pop_link(linkstack &s)
{
linkstack p;
while(s!=NULL)
{
p=s;printf("%d",p->elem);s=s->next;
}
}
【5】總體建立,實現出棧入棧
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define maxleng 100
typedef int ElemType;
typedef struct link
{
ElemType elem;
struct link *next;
}* linkstack;
void initstack (linkstack &s)
{
s=NULL;
}
void push_link(linkstack &s,ElemType e)
{
linkstack p;
p=new link;
p->elem=e;
p->next=s;
s=p;
}
void pop_link(linkstack &s)
{
linkstack p;
while(s!=NULL)
{
p=s;printf("%d",p->elem);s=s->next;
}
}
int main()
{ linkstack s;
initstack(s);
ElemType n,m,i;
scanf("%d" ,&n);
for(i=0;i<n;i++)
{ scanf("%d",&m);
push_link(s,m);
}
pop_link(s);
return 0;
}
棧的應用
一.數制轉換
【1】思想:
利用 m = ( N / d ) × d + n % d m=\left( N/d\right) \times d+n\% d m=(N/d)×d+n%d
【2】程式碼:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define maxleng 100
typedef int ElemType;
#define k 2//表示二進位制
typedef struct link
{
ElemType elem;
struct link *next;
}* linkstack;
void initstack (linkstack &s)
{
s=NULL;
}
void push_link(linkstack &s,ElemType e)
{
linkstack p;
p=new link;
p->elem=e;
p->next=s;
s=p;
}
void pop_link(linkstack &s)
{
linkstack p;
while(s!=NULL)
{
p=s;printf("%d",p->elem);s=s->next;
}
}
int main()
{ linkstack s;
initstack(s);
ElemType n,m,i;
scanf("%d",&n);
while(n>0)
{ push_link(s,n%k);
n=n/k;
}
pop_link(s);
return 0;
}
相關文章
- 學習JavaScript資料結構(一)——棧和佇列JavaScript資料結構佇列
- 資料結構基礎學習之(棧和佇列)資料結構佇列
- 資料結構(棧和佇列)資料結構佇列
- 資料結構—棧和佇列資料結構佇列
- 資料結構-佇列、棧資料結構佇列
- 【資料結構】棧(Stack)和佇列(Queue)資料結構佇列
- 資料結構二之棧和佇列資料結構佇列
- 資料結構-棧與佇列資料結構佇列
- 資料結構-js實現棧和佇列資料結構JS佇列
- 資料結構學習之佇列資料結構佇列
- JS資料結構學習:佇列JS資料結構佇列
- 【資料結構】棧和佇列的總結對比資料結構佇列
- 畫江湖之資料結構【第二話:佇列和棧】佇列資料結構佇列
- 畫江湖之資料結構 [第二話:佇列和棧] 佇列資料結構佇列
- 一本正經的聊資料結構(3):棧和佇列資料結構佇列
- JavaScript資料結構之陣列棧佇列JavaScript資料結構陣列佇列
- 畫江湖之資料結構【第二話:佇列和棧】棧資料結構佇列
- 畫江湖之資料結構 [第二話:佇列和棧] 棧資料結構佇列
- 《資料結構與演算法》——表、棧和佇列資料結構演算法佇列
- 2.1資料結構學習筆記--佇列資料結構筆記佇列
- 三、資料結構演算法-棧、佇列、優先佇列、雙端佇列資料結構演算法佇列
- Stack and Queue in JavaScript(Javascript中的資料結構之棧和佇列)JavaScript資料結構佇列
- 資料結構與演算法-棧與佇列資料結構演算法佇列
- php實現基本資料結構之棧、佇列PHP資料結構佇列
- python資料結構與演算法——棧、佇列與雙端佇列Python資料結構演算法佇列
- 重學資料結構(三、佇列)資料結構佇列
- 重學資料結構之佇列資料結構佇列
- 結構與演算法(02):佇列和棧結構演算法佇列
- 重溫四大基礎資料結構:陣列、連結串列、佇列和棧資料結構陣列佇列
- Python資料結構與演算法系列四:棧和佇列Python資料結構演算法佇列
- 資料結構 - 佇列資料結構佇列
- 資料結構-佇列資料結構佇列
- 【資料結構-----佇列】資料結構佇列
- 資料結構:特殊的線性表之 棧 & 佇列資料結構佇列
- 前端學習 資料結構與演算法 快速入門 系列 —— 佇列和雙端佇列前端資料結構演算法佇列
- 重學資料結構和演算法(一)之複雜度、陣列、連結串列、棧、佇列、圖資料結構演算法複雜度陣列佇列
- 資料結構與演算法(二)佇列、棧、連結串列資料結構演算法佇列
- C#資料結構與演算法2-C# 棧和佇列C#資料結構演算法佇列