资源描述:
《顺序栈的C语言程序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《数据结构》实验报告书学生学号学生姓名系别数学系专业班级《数据结构》实验报告书学生学号学生姓名系别数学系专业班级实验报告目的要求了解和掌握顺序栈的基本知识及操作要领,明白栈顶栈底等的概念,可以熟练上机调试运行程序实验内容学习顺序表的数据类型,数据结构,基本算法及相关应用程序代码#include #include #include typedef int elem_type; typedef struct { elem_type *e,*top; int len; int capacity; }Stack; Stack* Build(
2、int maxlen) { if(maxlen<0
3、
4、 maxlen>INT_MAX) return NULL; Stack *s = (Stack *)calloc(1, sizeof(Stack)); if(s) { s->e=(elem_type*)calloc(maxlen, sizeof(elem_type)); if(s->e) s->capacity = maxlen; else s->capacity =0; s->top = s->e; } return s; } bool Empty(Stack *s) { if(!s) return true; else return
5、 s->len==0; } bool Full(Stack *s) { if(!s) return true; return s->len == s->capacity; } bool Insert(Stack* s, elem_type a, int pos) { if(!s) return false; if(s->len == s->capacity) return false; if(pos<0
6、
7、pos>s->len) return false; int x; if(s->len==0){s->e[s->len++]=a; s->top ++; return true; } el
8、se { x = ++s->len ; s->top = s->e + s->len; while(x>pos) { s->e[x] = s->e[x-1]; x--; } s->e[pos] = a; return true; } return false; } bool Del(Stack *s, int pos, elem_type*x) { if(Empty(s)) return false; if(pos>s->len-1
9、
10、 pos < 0 ) return false; *x=s->e[pos]; int i=pos; while(ilen-1) { s->e
11、[i] = s->e[i+1]; i++; } s->len--; s->top--; return true; } elem_type Top(Stack *s) { return *(s->top-1); } bool Pop(Stack *s, elem_type *x) { if(!s
12、
13、 s->e==s->top) return false; else { *x = *(--s->top); s->len--;return true; } } void Push(Stack *s, elem_type x) { if(Full(s)) return; *(s->top++) =
14、x; s->len++; } void Clear(Stack *s) { if(s->e) free(s->e); s->len=0; s->e = s->top = NULL; } int main() { int a[10]={0,1,2,3,4,5,6,7,8,9}; Stack *s=Build(100); if(s==NULL){ printf("创建栈失败,可能内存空间不够!"); return (-1); } for (int i=0;i<10;i++) { Insert(s,a[i],0); } int x; printf("依次删除栈底元素:"); for
15、 (i=0;i<10;i++) { Del(s,0,&x); printf("%d",x); } printf("再次压栈:"); for (i=0;i<10;i++) { Push(s,a[i]); } printf("重新压栈后弹出栈顶元素:"); for (i=0;i<10;i++) { if(Pop(s,&x)) printf("%d", x); } Clear(s); f