博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c/c++ 线性栈
阅读量:5290 次
发布时间:2019-06-14

本文共 2683 字,大约阅读时间需要 8 分钟。

c/c++ 线性栈

线性栈

下面的代码实现了以下功能

函数 功能描述
push 压入
pop 弹出
show_list 打印
clear 移动top指针到栈底
destroy 释放所有内存空间

seqstack.h

#ifndef __SEQSTACK__#define __SEQSTACK__#include 
#include
#include
#include
#include
#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);}

转载于:https://www.cnblogs.com/xiaoshiwang/p/9240694.html

你可能感兴趣的文章
Search a 2D Matrix & II
查看>>
网站更新后客户端缓存问题
查看>>
Android OpenGL ES(四)关于EGL .
查看>>
thinkphp整合系列之苹果AppStore内购付款的服务器端php验证
查看>>
C# Oracle批量插入数据进度条制作
查看>>
SQL高级查询技巧(两次JOIN同一个表,自包含JOIN,不等JOIN)
查看>>
难搞的EXCHANGE重新安装错误
查看>>
认识hasLayout
查看>>
MyISAM InnoDB 区别
查看>>
TibetanFont | ཡིག་གཟུགས། | 藏文字体
查看>>
mac系统下mysql5.7.13数据库编码查看和设置
查看>>
cocurrent包 原子性数据类型
查看>>
[vijos1049] 送给圣诞夜的礼品
查看>>
Codeforces 940F Machine Learning (带修改莫队)
查看>>
Jenkins Pipline语法
查看>>
Linux useradd -M -s
查看>>
define
查看>>
使用DD 创建SWAP
查看>>
【笔记篇】Ubuntu一日游
查看>>
.NET CORE 第二节 中间件的原理和自定义中间件
查看>>