當前位置:首頁 » 操作系統 » 棧演算法

棧演算法

發布時間: 2022-07-27 13:36:29

1. 用棧進行表達式求值(c++)(符合的話我會追加分數的,越快越好!)

要對表達式就行遍歷,分為前序遍歷、中序遍歷和後序遍歷

2. c語言編程:順序棧的入棧與退棧及讀頂元素

舉一個例子說明 《停車場管理》
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#include "stdio.h"
#include "malloc.h"
#define max_stop 5 // 停車場容量//
#define PRICE 8 //停車單價 //
typedef struct//汽車//
{ char *license[20]; //汽車//
}car;
typedef struct //停車場//
{ car stop[max_stop]; //停車場//
int top;
}parking;

void come(car p,parking *tcc)
{
if(tcc->top>=max_stop-1){printf("已滿!!");}
else
{
printf(" 輸入到來汽車的車牌號碼 : ");
scanf("%s",p.license);
printf("\n");
tcc->top++; tcc->stop[tcc->top]=p;//如果停車場沒有滿就入場//
}
}
void display(car p,parking *tcc)
{
int n=0;
if(tcc->top==-1)printf(" 停車場內無汽車!\n"); //指針在-1處 停車場內無車//
else{ // 有車 //
printf("●停車場內的車為:\n");
while(n<=tcc->top)
{
printf("第 %d 輛 %s\n",n+1,tcc->stop[n].license);
n++;
}
}
}
void leave(car p,parking *tcc)
{
car leavecar;
int num,money,time;
printf(" 輸入將要離開的汽車車位號碼:");
scanf("%d",&num);
num--;
if(num>tcc->top||num<0)printf(" 你的輸入有誤 請檢查預備出停車場的車輛號碼\n");
else
{
printf(" 輸入此車停留的時間 : ");
scanf("%d",&time);
if(time<=0)printf(" 你的輸入有誤 請檢查停車時間\n");
else
{
leavecar=tcc->stop[num];
while(num<tcc->top)
{
tcc->stop[num]=tcc->stop[num+1];
num++;
}
tcc->top--;
}
}
if((num<=tcc->top) && (num>=0))
{
money=time*PRICE;
printf("● %s 已經離開停車場 停留%d小時 收費%d元",leavecar.license,time,money);
}
}
void welcome() //歡迎界面//
{
printf(" ●歡迎適用本程序●\n");
printf(" 本程序為停車場的模擬管理程序,有車到來時請按 C 鍵\n");
printf(" 然後根據屏幕提示進行相關操作,有車要走時請按 L 鍵\n");
printf(" 然後根據屏幕提示進行相關操作,若需要幫助請按 H 鍵\n");
printf(" 然後根據屏幕提示進行相關操作,要退出程序請按 Q 鍵\n");
}
void main()
{
char key;
car p;
parking *tcc;

tcc=(parking *)malloc(sizeof(parking));

tcc->top=-1;

while(1)
{
flushall();
printf(" 請輸入您的操作 : ");
scanf("%c",&key);
if(key=='c'||key=='C')come(p,tcc);
else if(key=='l'||key=='L')leave(p,tcc);
else if(key=='d'||key=='D')display(p,tcc);
else if(key=='h'||key=='H')welcome();
else if((key=='q')||(key=='Q'))break;
else printf(" 您的輸入有誤 ! ! 請重新輸入:\n");
}

}

3. 在c語言里,參數的壓棧和出棧分別是什麼意思

壓棧是進棧,把元素放到棧裡面;出棧,把元素從棧中取出。
棧是先進後出。舉個例子,一個裝羽毛球的筒子,一邊能開一邊不能開,1號球先進去,到筒子底部(進棧)。然後2號球接著進去,在你不拿出2號球的情況下,你是無法拿走1號球。而拿走球的操作就是出棧咯

4. 鏈棧演算法

這是我自己做的,能實現的,不過感覺有些繁瑣,還沒有精簡,看著用吧,宏定義有些是不需要的,不過避免出錯我全部寫上了。
#include "iostream.h"
#include "stdio.h"
#include "malloc.h"
//#include "stdlib.h

#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define N 5
#define SElemType int
typedef int Status;

typedef struct SNode{
SElemType data;
struct SNode *next;
}SNode,*StackPtr;

typedef struct {
StackPtr base;
StackPtr top;
}SqStack;

Status InitStack(SqStack&S){
S.base=S.top=(StackPtr)malloc(sizeof(SNode));
if(!S.top)return(OVERFLOW);
S.top->next=NULL;
return OK;
}
Status Push(SqStack &S,SElemType e){
SNode *p;
p=(StackPtr)malloc(sizeof(SNode));
if(!p)return(OVERFLOW);
p->data=e;
p->next=NULL;
S.top->next=p;
S.top=p;
return OK;
}
Status Pop(SqStack &S,SElemType &e){
SNode *p;
if(S.base==S.top)
return ERROR;
p=S.base->next;//注意頭結點的運用
e=p->data;
S.base->next=p->next;
if(S.top==p)S.top=S.base;
free(p);
return OK;
}
Status StackEmpty(SqStack S){
if(S.top==S.base)
return TURE;
else
return FALSE;
}

Status StackTraversee(SqStack S){
SNode *p;
p=S.base->next;
while(p<S.top)
{
cout<<p->data<<" ";
p=p->next;
}
while(p==S.top)
{
cout<<S.top->data<<endl;
p->next=NULL;
break;
}
return 0;
}

int main()
{
int i;
SElemType e;
SqStack S;
InitStack(S);
//cin>>s;

cout<<"請輸入一個棧:"<<endl;
for(i=1;i<=N;i++)
{
cin>>e;
Push(S,e);
}
cout<<"輸入的棧為:"<<endl;
StackTraversee(S);
Pop(S,e);
StackTraversee(S);
StackEmpty(S);
if(TURE)
cout<<"棧空."<<endl;
else if(FALSE)
cout<<"棧不空."<<endl;

return 0;
}

熱點內容
如何在外網訪問伺服器 發布:2025-01-19 14:29:45 瀏覽:380
百度重定向腳本 發布:2025-01-19 14:29:36 瀏覽:428
php怎麼反編譯 發布:2025-01-19 14:10:54 瀏覽:590
加密貨幣交易平台排名 發布:2025-01-19 13:58:21 瀏覽:741
紅綠燈的編程 發布:2025-01-19 13:57:37 瀏覽:113
老男孩linux教程 發布:2025-01-19 13:44:48 瀏覽:941
買車怎麼區分車配置 發布:2025-01-19 13:44:45 瀏覽:242
丟失緩存視頻 發布:2025-01-19 13:44:09 瀏覽:183
C語言tp 發布:2025-01-19 13:26:20 瀏覽:107
手機qq改變存儲位置 發布:2025-01-19 13:25:17 瀏覽:83