c語言用棧隊(duì)列函數(shù) 用棧實(shí)現(xiàn)隊(duì)列c語言

棧與隊(duì)列的應(yīng)用(C語言)求解

#include "stdio.h"

薛城ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

#include "malloc.h"

typedef struct node1{

int *data;

int top;

void init(void);

void del(void);

int pop(int);

void push(int);

}s;

void node1::init(){

data=(int*)malloc(sizeof(int)*100);

top=0;

}

void node1::del(){

free(data);

top=0;

}

int node1::pop(int e){

if(top==0)return 0;

e=data[--top];

return 1;

}

void node1::push(int e){

if(top==100)return;

data[top++]=e;

}

typedef struct node2{

int *data;

int top;

int bottom;

void init(void);

void del(void);

int pop(int);

void push(int);

void format(s);

}q;

void node2::init(){

data=(int*)malloc(sizeof(int)*100);

top=bottom=0;

}

void node2::del(){

free(data);

top=bottom=0;

}

int node2::pop(int e){

if(top==bottom)return 0;

e=data[top++];

return 1;

}

void node2::push(int e){

if(bottom==100)return;

data[bottom++]=e;

}

void node2::format(s e){

int a;

while(e.pop(a)){

push(a);

}

}

int main(){

s b;q c;

int a;

b.init();c.init();

printf("輸入棧中的數(shù),以0結(jié)尾\n");

while(1){

scanf("%d",a);

if(a==0)break;

b.push(a);

}

c.format(b);

while(c.pop(a)){

printf("%d\n",a);

}

b.del();

c.del();

return 0;

}//b為棧,c為隊(duì)列,c.format(b)為轉(zhuǎn)換函數(shù)

c語言堆棧和隊(duì)列

棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱為棧頂,相對(duì)地,把另一端稱為棧底。向一個(gè)棧插入新元素又稱作進(jìn)棧、入?;驂簵?,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個(gè)棧刪除元素又稱作出?;蛲藯#前褩m斣貏h除掉,使其相鄰的元素成為新的棧頂元素。

隊(duì)列是一種特殊的線性表,特殊之處在于它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作,和棧一樣,隊(duì)列是一種操作受限制的線性表。進(jìn)行插入操作的端稱為隊(duì)尾,進(jìn)行刪除操作的端稱為隊(duì)頭。

以上是從數(shù)據(jù)結(jié)構(gòu)角度來看,從操作系統(tǒng)角度來看,所有的數(shù)據(jù)結(jié)構(gòu)都是對(duì)虛擬內(nèi)存的操作,堆是堆,棧是棧,棧指的是C語言函數(shù)所使用的自動(dòng)有函數(shù)回收的虛擬內(nèi)存空間,而堆則有操作系統(tǒng)堆管理器來管理的那部分虛擬內(nèi)存,從C語言角度來看,使用malloc函數(shù)動(dòng)態(tài)分配的內(nèi)存,就是堆內(nèi)存。

C語言 數(shù)據(jù)結(jié)構(gòu) 隊(duì)列和棧問題

給你看下棧的頭文件

你自己添加判斷是否是回文的方法吧

#ifndef STACK_H

#define STACK_H

#include iostream

using std::ostream;

//template class Type

//class Stack;

//template class Type

//ostream operator (ostream , const StackType );

template class Type

class Stack {

friend ostream operator (ostream , const StackType );

public:

static const int DefaultSize;

Stack(int = DefaultSize); //創(chuàng)建一個(gè)最大容量為MaxStackSize的空棧

Stack(Type[], int, int = DefaultSize); //用數(shù)組初始化棧

~Stack(){ delete [] stack; }

bool IsFull(); //若元素個(gè)數(shù)等于棧的最大容量則返回TRUE,否則返回FALSE

void Add(const Type ); //若IsFull()為TRUE,則調(diào)用StackFull,否則將item插入棧頂

bool IsEmpty(); //若棧中元素個(gè)數(shù)等于0則返回TRUE,否則返回FALSE

Type * Delete(Type); //若IsEmpty()為TRUE,則調(diào)用StackEmpty并返回0,

//否則刪除棧頂元素并返回其指針

void StackFull(); //將棧的最大容量擴(kuò)大一倍

void StackEmpty(); //輸出警告:棧已空, 不能彈出變量

void Empty(); //將棧清空

int GetSize(); //獲得棧內(nèi)元素?cái)?shù)目

private:

Type * stack;

int MaxSize;

int top;

};

template class Type

const int StackType::DefaultSize = 10;

template class Type

StackType::Stack(int pMaxSize) {

MaxSize = pMaxSize;

stack = new Type[MaxSize];

top = -1;

}

template class Type

StackType::Stack(Type pArray[], int pLen, int pMaxSize) {

stack = new Type[pMaxSize];

for ( int i = 0; i pLen; i++ )

{

stack[i] = pArray[i];

}

top = pLen - 1;

MaxSize = pMaxSize;

}

template class Type

inline bool StackType::IsFull() {

if (top == MaxSize - 1) return true;

else return false;

}

template class Type

inline bool StackType::IsEmpty() {

if (top == -1) return true;

else return false;

}

template class Type

void StackType::Add(const Type pX) {

if (IsFull())

{

StackFull();

stack[++top] = pX;

}

else stack[++top] = pX;

}

template class Type

Type * StackType::Delete(Type pX) {

if (IsEmpty())

{

StackEmpty();

return 0;

}

pX = stack[top--];

return pX;

}

template class Type

void StackType::StackEmpty() {

cout "棧已空,不能進(jìn)行彈出操作!" endl;

}

template class Type

void StackType::StackFull() {

Type * nStack = new Type[MaxSize * 2];

for ( int i = 0; i = top; i++ )

{

nStack[i] = stack[i];

}

MaxSize = MaxSize * 2;

delete [] stack;

stack = nStack;

cout "棧已滿,棧的自動(dòng)容量自動(dòng)擴(kuò)充為原來的兩倍 (" MaxSize ")" endl;

}

template class Type

ostream operator (ostream pOutput, const StackType pS) {

if (pS.top == -1)

{

pOutput "空棧" endl;

return pOutput;

}

for ( int i = 0; i = pS.top; i++ )

{

pOutput pS.stack[i] " ";

}

return pOutput;

}

template class Type

void StackType::Empty() {

top = -1;

}

template class Type

int StackType::GetSize() {

return top + 1;

}

#endif

計(jì)算機(jī)c語言中 什么是棧和隊(duì)列

棧(Stack)是僅限制在表的一端進(jìn)行插入和刪除運(yùn)算的線性表,稱插入、刪除這一端為棧頂,另一端稱為棧底。表中無元素時(shí)為空棧。棧 的修改是按后進(jìn)先出的原則進(jìn)行的,我們又稱棧為L(zhǎng)IFO表(Last In First Out)。通常棧有順序棧和鏈棧兩種存儲(chǔ)結(jié)構(gòu)。 棧的基本運(yùn)算有六種: ·構(gòu)造空棧:InitStack(S) ·判??? StackEmpty(S) ·判棧滿: StackFull(S) ·進(jìn)棧: Push(S,x) ·退棧: Pop(S) ·取棧頂元素:StackTop(S) 在順序棧中有"上溢"和"下溢"的現(xiàn)象。 ·"上溢"是棧頂指針指出棧的外面是出錯(cuò)狀態(tài)。 ·"下溢"可以表示棧為空棧,因此用來作為控制轉(zhuǎn)移的條件。 順序棧中的基本操作有六種:·構(gòu)造空?!づ袟?铡づ袟M·進(jìn)?!ね藯!とm斣?鏈棧則沒有上溢的限制,因此進(jìn)棧不要判棧滿。鏈棧不需要在頭部附加頭結(jié)點(diǎn),只要有鏈表的頭指針就可以了。 鏈棧中的基本操作有五種:·構(gòu)造空?!づ袟?铡みM(jìn)?!ね藯!とm斣?隊(duì)列(Queue)是一種運(yùn)算受限的線性表,插入在表的一端進(jìn)行,而刪除在表的另一端進(jìn)行,允許刪除的一端稱為隊(duì)頭(front),允許插入的 一端稱為隊(duì)尾(rear) ,隊(duì)列的操作原則是先進(jìn)先出的,又稱作FIFO表(First In First Out) 。隊(duì)列也有順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)兩種存儲(chǔ)結(jié) 構(gòu)。 隊(duì)列的基本運(yùn)算有六種: ·置空隊(duì):InitQueue(Q) ·判隊(duì)空:QueueEmpty(Q) ·判隊(duì)滿:QueueFull(Q) ·入隊(duì):EnQueue(Q,x) ·出隊(duì):DeQueue(Q) ·取隊(duì)頭元素:QueueFront(Q) 順序隊(duì)列的"假上溢"現(xiàn)象:由于頭尾指針不斷前移,超出向量空間。這時(shí)整個(gè)向量空間及隊(duì)列是空的卻產(chǎn)生了"上溢"現(xiàn)象。 為了克服"假上溢"現(xiàn)象引入循環(huán)向量的概念,是把向量空間形成一個(gè)頭尾相接的環(huán)形,這時(shí)隊(duì)列稱循環(huán)隊(duì)列。 判定循環(huán)隊(duì)列是空還是滿,方法有三種: ·一種是另設(shè)一個(gè)布爾變量來判斷; ·第二種是少用一個(gè)元素空間,入隊(duì)時(shí)先測(cè)試((rear+1)%m = front)? 滿:空; ·第三種就是用一個(gè)計(jì)數(shù)器記錄隊(duì)列中的元素的總數(shù)。 隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)稱為鏈隊(duì)列,一個(gè)鏈隊(duì)列就是一個(gè)操作受限的單鏈表。為了便于在表尾進(jìn)行插入(入隊(duì))的操作,在表尾增加一個(gè)尾指 針,一個(gè)鏈隊(duì)列就由一個(gè)頭指針和一個(gè)尾指針唯一地確定。鏈隊(duì)列不存在隊(duì)滿和上溢的問題。在鏈隊(duì)列的出隊(duì)算法中,要注意當(dāng)原隊(duì)中只 有一個(gè)結(jié)點(diǎn)時(shí),出隊(duì)后要同進(jìn)修改頭尾指針并使隊(duì)列變空。

c語言實(shí)現(xiàn)隊(duì)列和棧的方法

#define OVERFLOW -1

#define OK 1

#define ERROR 0

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

#define N 20

typedef char SElemType;

typedef int Status;typedef struct {

SElemType *base;

SElemType *top;

int stacksize;

}SqStack;#includestdio.h

#includestdlib.hStatus CreatStack(SqStack S){

//創(chuàng)建棧

S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));

if(!S.base)exit(OVERFLOW);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

return OK;

}//CreatStackStatus Push(SqStack S,SElemType e){

//插入e為新的棧頂元素

if(S.top-S.base=S.stacksize){//棧滿,追加存儲(chǔ)空間

S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));

if(!S.base)exit (OVERFLOW);//存儲(chǔ)空間分配失敗

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

}

*S.top++=e;

return OK;

}//PushStatus Pop(SqStack S ,SElemType e){

//若棧不空,刪除棧頂元素,并用e返回其值

if(S.top==S.base) return ERROR;

e=*--S.top;

return OK;

}//Pop typedef char QElemType;

typedef struct QNode{

QElemType data;

struct QNode *next;

}QNode,*QNodePtr;typedef struct{

QNodePtr front;

QNodePtr rear;

}LinkQueue;Status CreatQueue(LinkQueue Q){

//建立一個(gè)空的鏈?zhǔn)綏?/p>

Q.front=Q.rear=(QNodePtr)malloc(sizeof(QNode));

if(!Q.front)exit(OVERFLOW);

Q.front-next=NULL;

return OK;

}Status EnQueue(LinkQueue Q,QElemType e){ QNodePtr p;

p=(QNodePtr)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,QElemType e){QNodePtr p;brif(Q.front==Q.rear) return ERROR;brp=Q.front-next; e=p-data;brQ.front-next=p-next;brif(Q.rear==p) Q.rear=Q.front;brfree(p);brreturn OK;br}int stackPalindrom_Test()//判別輸入的字符串是否回文序列,是則返回1,否則返回0

{

printf("棧練習(xí),請(qǐng)輸入要判斷的字符串以#作為結(jié)束符,不要超過二十個(gè)字符\n");

SqStack S;

CreatStack(S);

char c;

SElemType a;

SElemType b[N];

int count = 0;

fgets( b, N, stdin );

while((b[count])!='#')

{

Push(S,b[count]); //進(jìn)棧

count++;

}

int i = 0;

while(i count)

{

Pop(S,a);

if(a!=b[i])

return ERROR;

i++;

}

return OK;}//stackPalindrom_Test int queuePalindrom_Test()//判別輸入的字符串是否回文序列,是則返回1,否則返回0

{

printf("隊(duì)列練習(xí),請(qǐng)輸入要判斷的字符串以#作為結(jié)束符,不要超過二十個(gè)字符\n");

LinkQueue Q;

CreatQueue(Q); char c;

SElemType a;

SElemType b[N];

int count = 0;

fgets( b, N, stdin );

while((b[count])!='#')

{

EnQueue(Q,b[count]);; //入列

count++;

} while(count-- 0)

{

DeQueue(Q,a);

if(a!=b[count])

return ERROR;

}

return OK;

}//queuePalindrom_Test Status main(){ if(stackPalindrom_Test()==1)

printf("是回文\n");

else printf("不是回文\n"); if(queuePalindrom_Test()==1)

printf("是回文\n");

else printf("不是回文\n");

return OK;

}

本文標(biāo)題:c語言用棧隊(duì)列函數(shù) 用棧實(shí)現(xiàn)隊(duì)列c語言
鏈接分享:http://muchs.cn/article40/hjeceo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、品牌網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、云服務(wù)器、ChatGPT關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司