c/c++ 線性棧

來源:互聯網
上載者:User

標籤:tac   clu   real   ***   default   turn   bool   空間   while   

c/c++ 線性棧

線性棧

下面的代碼實現了以下功能

函數 功能描述
push 壓入
pop 彈出
show_list 列印
clear 移動top指標到棧底
destroy 釋放所有記憶體空間

seqstack.h

#ifndef __SEQSTACK__#define __SEQSTACK__#include <stdio.h>#include <malloc.h>#include <assert.h>#include <memory.h>#include <stdbool.h>#define SEQSTACK_INIT_SIZE 8#define ADD_SIZE 1000typedef int ElemType;typedef struct seqstack{  int size;  ElemType *base;  ElemType *top;}seqstack;void init(seqstack*);void push(seqstack*, ElemType);void show_list(seqstack*);void pop(seqstack*);int length(seqstack*);void clear(seqstack*);void destroy(seqstack*);#endif

seqstack.c

#include "seqstack.h"bool reInit(seqstack* seq){  ElemType* new = (ElemType*)realloc(seq->base, ADD_SIZE *sizeof(ElemType));  if(NULL == new)return true;  if(seq->base != new){    seq->base = new;    seq->top = seq->base + seq->size + 1;  }  return false;}void init(seqstack* seq){  ElemType* e = (ElemType*)malloc(sizeof(ElemType) * SEQSTACK_INIT_SIZE);  seq->base = seq->top = e;  seq->size = 0;}void push(seqstack* seq, ElemType x){  if(seq->size >= SEQSTACK_INIT_SIZE && reInit(seq)){    printf("stack is full\n");    return;  }  //先賦值,後移動top的指向  *((seq->top)++) = x;  seq->size++;}void show_list(seqstack* seq){  ElemType* e = seq->top;  while(e-- != seq->base){    printf("%d\n",*e);  }}void pop(seqstack* seq){  --seq->top;  seq->size--;}int length(seqstack* seq){  return seq->size;}void clear(seqstack* seq){  seq->top = seq->base;  seq->size = 0;}void destroy(seqstack* seq){  free(seq->base);}

seqstackmain.c

#include "seqstack.h"int main(){  seqstack list;  init(&list);  int select = 1;  ElemType item;  int index;  while(select){    printf("*****************************************\n");    printf("*** [1]   push        [2]  pop        ***\n");    printf("*** [3]   show_list   [4]  length     ***\n");    printf("*** [5]   clear       [6]  destroy    ***\n");    printf("*** [0]   quit                        ***\n");    printf("*****************************************\n");    printf("請選擇:>");    scanf("%d", &select);    if(0 == select)      break;    switch(select){    case 1:      printf("請輸入要插入的資料>\n");      scanf("%d",&item);      push(&list, item);          show_list(&list);      break;    case 2:      pop(&list);         show_list(&list);      break;    case 3:      show_list(&list);      break;    case 4:      printf("length is %d\n", length(&list));      show_list(&list);      break;    case 5:      clear(&list);      show_list(&list);      break;    case 6:      destroy(&list);      break;    default:      printf("輸入的選擇錯誤,請重新選擇\n");      break;    }  }  destroy(&list);}

c/c++ 線性棧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.