栈数组与栈链表C语言代码实现
- 作者: _爱不单行_
- 来源: 51数据库
- 2022-09-29
栈数组代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include<stdio.h>#include<stdlib.h>#include<string.h>#define maxn 10000//结点设计typedef struct stack{ int data[maxn]; int top;}stack;//创建stack *init(){ stack *s=(stack *)malloc(sizeof(stack)); if(s==NULL){ printf("分配内存空间失败"); exit(0); } memset(s->data,0,sizeof(s->data)); //memset操作来自于库文件string.h,其表示将整个空间进行初始化 //不理解可以查阅百度百科https://baike.baidu.com/item/memset/4747579?fr=aladdin s->top=0; //栈的top和bottom均为0(表示为空) return s;}//入栈pushvoid push(stack *s,int data){ s->data[s->top]=data; s->top++;}//出栈popvoid pop(stack *s){ if(s->top!=0){ s->data[s->top]=0; //让其回归0模拟表示未初始化即可 s->top--; }}//模拟打印栈中元素void print_stack(stack *s){ for(int n=s->top-1;n>=0;n--){ printf("%d\t",s->data[n]); } printf("\n"); //习惯性换行}int main(){ stack *s=init(); int input[5]={11,22,33,44,55}; //模拟五个输入数据 for(int i=0;i<5;i++){ push(s,input[i]); } print_stack(s); ///////////// pop(s); print_stack(s); return 0;} |
栈链表代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | an#include <stdio.h>#include <stdlib.h>//栈的结点设计//单个结点设计,数据和下一个指针typedef struct node { int data; struct node *next;} Node;//利用上面的结点创建栈,分为指向头结点的top指针和计数用的counttypedef struct stack { Node *top; int count;} Link_Stack;//创建栈Link_Stack *Creat_stack(){ Link_Stack *p; //p = new Link_Stack; p=(Link_Stack*)malloc(sizeof(Link_Stack)); if(p==NULL){ printf("创建失败,即将退出程序"); exit(0); } p->count = 0; p->top = NULL; return p;}//入栈 pushLink_Stack *Push_stack(Link_Stack *p, int elem){ if (p == NULL) return NULL; Node *temp; temp=(Node*)malloc(sizeof(Node)); //temp = new Node; temp->data = elem; temp->next = p->top; p->top = temp; p->count++; return p;}//出栈 popLink_Stack *Pop_stack(Link_Stack *p){ Node *temp; temp = p->top; if (p->top == NULL) { printf("错误:栈为空"); return p; } else { p->top = p->top->next; free(temp); //delete temp; p->count--; return p; }}//遍历栈:输出栈中所有元素int show_stack(Link_Stack *p){ Node *temp; temp = p->top; if (p->top == NULL) { printf(""); printf("错误:栈为空"); return 0; } while (temp != NULL) { printf("%d\t", temp->data); temp = temp->next; } printf("\n"); return 0;}int main(){ //用主函数测试一下功能 Link_Stack *p; p = Creat_stack(); int n = 5; int input[6] = {10,20,30,40,50,60}; /////////////以依次入栈的方式创建整个栈////////////// for(int i=0;i<n;i++){ Push_stack(p, input[i]); } show_stack(p); ////////////////////出栈/////////////////////// Pop_stack(p); show_stack(p); return 0;} |
PS:栈的概念被极大量的运用于各种程序设计之中,作为一种数据结构,其先进后出的特殊性质为很多算法的设计埋下伏笔,为之开通快车道。
推荐阅读
热点文章
检查拆分键盘
0
带有“上一个"的工具栏和“下一个"用于键盘输入AccessoryView
0
Activity 启动时显示软键盘
0
UIWebView 键盘 - 摆脱“上一个/下一个/完成"酒吧
0
在 iOS7 中边缘滑动时,使键盘与 UIView 同步动画
0
我的 iOS 应用程序中的键盘在 iPhone 6 上太高了.如何在 XCode 中调整键盘的分辨率?
0
android:inputType="textEmailAddress";- '@' 键和 '.com' 键?
0
禁用 iPhone 中键盘的方向
0
Android 2.3 模拟器上的印地语键盘问题
0
keyDown 没有被调用
0
