c語言怎麼寫棧,C語言定義棧

本文目錄一覽:

數據結構實驗(用c語言寫) 棧的基本操作

//順序棧

#include

#include

#include

#define

STACK_INIT_SIZE

100;

#define

STACKINCREMENT

10;

typedef

struct

{

int

*base;

int

*top;

int

stacksize;

}SqStack;

typedef

int

ElemType;

int

InitStack(SqStack

S)

//為棧S分配存儲空間,並置S為空棧

{

int

size

=

STACK_INIT_SIZE;

S.base=(int

*)malloc(size*sizeof(ElemType));

if(!S.base)

return

0;

S.top=S.base;

//置棧S為空棧

S.stacksize=STACK_INIT_SIZE;

return

1;

}

int

GetTop(SqStack

S,int

e)

//若棧不空,則用e返回S的棧頂元素

{

if(S.top==S.base)

return

0;

e=*(S.top-1);

return

1;

}

int

Push(SqStack

S,

int

e)

/*進棧函數,將e插入棧S中,並使之成為棧頂元素*/

{

if(S.top-S.base=S.stacksize)

/*棧滿,追加存儲空間*/

{

int

stackinvrement

=

STACKINCREMENT;

S.base=(ElemType

*)

realloc(S.base,(S.stacksize+stackinvrement)*sizeof(ElemType));

if(!S.base)

return

0;

/*存儲分配失敗*/

S.stacksize+=STACKINCREMENT;

}

*S.top++=e;

return

1;

}

int

Pop(SqStack

S,int

e)/*出棧函數,若棧S不空,則刪除S的棧頂元素,用e返回其值*/

{

if(S.top==S.base)

return

0;

e=*–S.top;

return

1;

}

void

OutputStack(SqStack

S)

{int

*q;

q=S.top-1;

for(int

i=0;i

#include

typedef

struct

SNode

{

int

data;

struct

SNode

*next;

}SNode,*LinkStack;

LinkStack

top;

LinkStack

PushStack(LinkStack

top,int

x)

//入棧

{

LinkStack

s;

s=(LinkStack)malloc(sizeof(SNode));

s-data=x;

s-next=top;

top=s;

return

top;

}

LinkStack

PopStack(LinkStack

top)

//退棧

{

LinkStack

p;

if(top!=NULL)

{

p=top;

top=top-next;

free(p);

printf(“退棧已完成\n”);

return

top;

}

else

printf(“棧是空的,無法退棧!\n”);

return

0;

}

int

GetStackTop(LinkStack

top)

//取棧頂元素

{

return

top-data;

}

bool

IsEmpty()//bool取值false和true,是0和1的區別,bool只有一個位元組,BOOL為int型,bool為布爾型

{

return

top==NULL

?

true:false;

}

void

Print()

{

SNode

*p;

p=top;

if(IsEmpty())

{

printf(“The

stack

is

empty!\n”);

return;

}

while(p)

{

printf(“%d

“,

p-data);

p=p-next;

}

printf(“\n”);

}

void

main()

{

int

x,a,b;

char

m;

do

{

printf(“\n”);

printf(“###############鏈棧的基本操作##################\n”);

printf(“××××××××1.置空棧××××××××××\n”);

printf(“××××××××2.進棧×××××××××××\n”);

printf(“××××××××3.退棧×××××××××××\n”);

printf(“××××××××4.取棧頂元素××××××××\n”);

printf(“××××××××5.退出程序×××××××××\n”);

printf(“##############################################\n”);

printf(“\n請選擇一個字元:”);

scanf(“%c”,m);

switch(m){

case

‘1’:

top=NULL;

printf(“\n棧已置空!”);

break;

case

‘2’:

printf(“\n請輸入要進棧的元素個數是:”);

scanf(“%d”,a);

printf(“\n請輸入要進棧的%d個元素:”,a);

for(b=0;b

評論

載入更多

c語言實現隊列和棧的方法

#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){

//創建棧

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){//棧滿,追加存儲空間

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

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

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){

//建立一個空的鏈式棧

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(“棧練習,請輸入要判斷的字元串以#作為結束符,不要超過二十個字元\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]); //進棧

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(“隊列練習,請輸入要判斷的字元串以#作為結束符,不要超過二十個字元\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;

}

棧的c語言實現基本操作

寫了一個鏈式棧,你看看

# include stdio.h

# include malloc.h

# include stdlib.h

typedef struct Node

{

int data;

struct Node *pNext;

}NODE, *PNODE;

typedef struct Stack

{

PNODE pTop;

PNODE pBottom;//pBottem是指向棧底下一個沒有實際意義的元素

}STACK, *PSTACK;

void init( PSTACK );

void push( PSTACK, int );

void traverse( PSTACK );

int pop( PSTACK, int * );

int empty( PSTACK pS );

int main( void )

{

STACK S;//STACK等價於struct Stack

int val;

init( S );//目的是造出一個空棧

push( S, 1 );//壓棧

push( S, 2 );

push( S, 3 );

push( S, 4 );

push( S, 5 );

push( S, 6 );

push( S, 7 );

traverse( S );//遍歷輸出

// clear( S ); //清空數據

// traverse( S );//遍歷輸出

if( pop( S, val ) )

{

printf( “出棧成功,出棧的元素是%d\n”, val );

}

else

{

printf( “出棧失敗” );

}

traverse( S );//遍歷輸出出棧之後的元素

return 0;

}

void init( PSTACK pS )

{

pS-pTop = ( PNODE )malloc( sizeof( NODE ) );

if( NULL == pS-pTop )

{

printf( “動態內存分配失敗!\n” );

exit( -1 );

}

else

{

pS-pBottom = pS-pTop;

pS-pTop-pNext = NULL;//或是pS-pBottom = NULL;

}

}

void push( PSTACK pS, int val )

{

PNODE pNew = ( PNODE )malloc( sizeof( NODE ) );

pNew-data = val;

pNew-pNext = pS-pTop;//pS-Top不能改為pS-pBottom

pS-pTop = pNew;

}

void traverse( PSTACK pS )

{

PNODE p = pS-pTop;

while( p != pS-pBottom )

{

printf( “%d “, p-data );

p = p-pNext;

}

printf( “\n” );

}

int empty( PSTACK pS )

{

if( pS-pTop == pS-pBottom )

return 1;

else

return 0;

}

//把pS所指向的棧出棧一次,並把出棧的元素存入pVal形參所指向的變數中,如果出棧失敗,則返回false,否則true

int pop( PSTACK pS, int *pVal)

{

if( empty( pS ) )//pS本身存放的就是S的地址

{

return 0;

}

else

{

PNODE r = pS-pTop;

*pVal = r-data;

pS-pTop = r-pNext;

free( r );

r = NULL; //為什麼要把r賦給NULL呢??

return 1;

}

}

//clear清空

void clear( PSTACK pS )

{

if( empty( pS ) )

{

return ;

}

else

{

PNODE p = pS-pTop;

PNODE q = p-pNext;

while( p != pS-pBottom )

{

q = p-pNext;

free( p );

p = q;

}

pS-pTop = pS-pBottom;

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/304541.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-01 11:05
下一篇 2025-01-01 11:05

相關推薦

  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python符號定義和使用方法

    本文將從多個方面介紹Python符號的定義和使用方法,涉及注釋、變數、運算符、條件語句和循環等多個方面。 一、注釋 1、單行注釋 # 這是一條單行注釋 2、多行注釋 “”” 這是一…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python中的隊列定義

    本篇文章旨在深入闡述Python中隊列的定義及其應用,包括隊列的定義、隊列的類型、隊列的操作以及隊列的應用。同時,我們也會為您提供Python代碼示例。 一、隊列的定義 隊列是一種…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python編程技巧:如何定義一個函數n!,並計算5!

    在這篇文章中,我們將研究如何使用Python編程語言定義一個能夠計算階乘的函數,並且演示如何使用該函數計算5!。 一、階乘函數的定義 在Python中,我們可以使用一個簡單的遞歸函…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29

發表回復

登錄後才能評論