舊雨新知9的個(gè)人空間 http://selenalain.com/space-uid-41802.html [收藏] [復制] [RSS]

博客

順序棧的各種基本運算

已有 1851 次閱讀2011-8-10 13:08

實(shí)驗內容與要求:

 

編寫(xiě)一個(gè)程序,實(shí)現順序棧的各種基本運算,并在基礎上完成以下功能:

1)       初始化順序棧;

2)       判斷順序棧是否為空;

3)       依次進(jìn)棧元素a,b,c,d,e;

4)       判斷順序棧是否為空;

5)       輸出棧長(cháng)度;

6)       輸出從棧頂到棧底的元素;

7)       讀出棧頂元素;

8)       刪除棧頂元素;

9)       輸出從棧頂到棧底的元素;

10)    判斷順序棧是否為空;

11)    釋放棧。

 

 

代碼如下:

 

#include<stdio.h>

#include<malloc.h>

#include<stdlib.h>

 

#define TRUE  1

#define FALSE 0

#define OK 1

#define ERROR 0

#define NULL  0

#define OVERFLOW -2

 

typedef int Status;

typedef char SElemType;

Status visit(SElemType e);

 

#define STACK_INIT_SIZE  100  // 棧存儲空間的初始分配量

#define STACKINCREMENT  10    // 存儲空間分配增量

typedef struct {

   SElemType  *base;            // 存儲數據元素的數組

   SElemType  *top;             // 棧頂指針

   int stacksize;               // 當前分配的?臻g大小,sizeof(SElemType)為單位

}SqStack;

 

Status InitStack (SqStack &S) {

       // 構造一個(gè)空棧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;

}// InitStack

 

Status DestroyStack (SqStack &S) {

       // 銷(xiāo)毀棧S

       free(S.base);

       S.base=NULL;

       S.top=NULL;

       S.stacksize=0;

       return OK;

}// DestroyStack

 

Status StackEmpty (SqStack S) {

       // 判斷棧S是否為空

       if(S.top==S.base)

              return TRUE;

       else

              return FALSE;

}// StackEmpty

 

Status Push (SqStack &S, SElemType e) {

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

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

              // 棧滿(mǎn),追加存儲空間

              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;

}// Push

 

int StackLength (SqStack S) {

       // 返回S的元素個(gè)數,即棧的長(cháng)度

       return S.top-S.base;

}// StackLength

 

Status GetTop (SqStack S, SElemType &e) {

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

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

       e = *(S.top-1);

       return OK;

}// GetTop

 

Status Pop (SqStack &S, SElemType &e) {

       // 若棧不空,則刪除S的棧頂元素

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

       e= * --S.top;

       return OK;

}// Pop

 

Status StackTraverse (SqStack S, Status( *visit)(SElemType)) {

       // 遍歷棧

       while(S.top!=S.base)

    visit(*--S.top);

    return OK;

}// StackTraverse

 

void main() {

       // 主函數

       SElemType e;

       SqStack S;

       printf("(1)初始化順序棧。\n");

       InitStack(S);

       printf("(2)判斷順序棧是否為空:\n");

       StackEmpty(S);

       printf("(3)依次進(jìn)棧元素a,b,c,d,e:\n");

       Push(S,'a');

       Push(S,'b');

       Push(S,'c');

       Push(S,'d');

       Push(S,'e');

       printf("(4)判斷順序棧是否為空:\n");

       StackEmpty(S);

       printf("(5)輸出棧長(cháng)度:%d\n",StackLength(S));

       printf("(6)輸出從棧頂到棧底的元素:\n");

       StackTraverse(S,visit);

       printf("(7)讀出棧頂元素:%d\n",GetTop(S,e));

       printf("(8)刪除棧頂元素:%d\n",Pop(S,e));

       printf("(9)輸出從棧頂到棧底的元素:\n");

       StackTraverse(S,visit);

       printf("(10)判斷順序棧是否為空\n");

       StackEmpty(S);

       printf("(11)釋放棧。");

       DestroyStack(S);

}

評論 (0 個(gè)評論)

facelist

您需要登錄后才可以評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
返回頂部
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页