C/C++知识点之数据结构c语言版 栈
小标 2018-11-13 来源 : 阅读 1540 评论 0

摘要:本文主要向大家介绍了C/C++知识点之数据结构c语言版 栈,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之数据结构c语言版 栈,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

      

栈栈是限定仅在表尾进行插入或删除操作的线性表。表头端称栈底。表尾端称栈顶。
(1)先进后出(2)top = base 表示栈空(3)非空栈中的栈顶指针始终在栈顶元素的下一个位置上,如上图(4)若base = null 表明栈结构不存在栈的实现代码

 1 #include
 2 #include
 3 #define STACK_INIT_SIZE 100
 4 #define STACKINCREMENT 10
 5 typedef int Status;
 6 #define OK 1
 7 #define ERROR 0
 8 typedef struct
 9 {
10     char *base; /*在栈构造之前和销毁之后,base值为NULL*/
11     char *top; /*栈顶指针*/
12     int stacksize;  /*当前已分配的存储空间,以元素为单位*/
13 }sqstack;
14 
15 //创建一个栈
16 void CreateStack(sqstack *s)
17 {/*构造一个空栈S*/
18     (*s).base = (char*)malloc(STACK_INIT_SIZE*sizeof(char));
19     if (!(*s).base) exit(ERROR);  /*存储分配失败*/
20     (*s).top = (*s).base;
21     (*s).stacksize = STACK_INIT_SIZE;
22 }
23 
24 
25 //入栈
26 void push(sqstack *s, char x) /*插入元素e为新的元素*/
27 {
28     if (((*s).top - (*s).base) >= (*s).stacksize)
29     {
30         (*s).base = (char *)realloc((*s).base, ((*s).stacksize + STACKINCREMENT)*sizeof(char));
31         if (!(*s).base) exit(ERROR);  /*存储分配失败*/
32         (*s).top = (*s).base + (*s).stacksize;
33         (*s).stacksize += STACKINCREMENT;
34     }
35     *((*s).top)++ = x;
36 }
37 
38 
39 //出栈
40 int pop(sqstack *s)
41 {/*若栈不空,则删除S的栈顶元素,用e返回其值,并返回值*/
42     if ((*s).top == (*s).base)  return ERROR;
43     else {
44         (*s).top = (*s).top - 1;
45 
46         char str;
47         str = *((*s).top);
48         printf("%c  ", str);
49     }
50     return OK;
51 }
52 
53 int main()
54 {
55     sqstack s;
56 
57     CreateStack(&s);
58     
59     int num, i;
60     char a, c;//c用来吃回车键
61     printf("输入入栈元素个数:\n");
62     scanf("%d", &num);
63     c = getchar();//scanf的输入规则可以看下方备注
64     printf("输入入栈元素:\n");
65     for (i = 0; i < num; i++){
66         scanf("%c", &a);
67         c = getchar();
68         push(&s, a);
69     }
70     printf("出栈顺序为:\n");
71     for (i = 0; i < num; i++){
72         pop(&s);
73     }
74     system("pause");
75     return 0;
76 }

 

scanf的输入规则:
   scanf函数最常用的两种输入方式%d整数输入方式,以及%c字符输入方式。       用%d方式输入整数时,输入一串数字然后按回车符,输入就完成了。而用%c方式输入字符时,就稍微复杂一点。一般来说用%c输入字符时,当输完以后,都习惯按一下回车,这时回车符就成了一个问题。      

【例1】:       scanf("%c",&a); /*此时输入一个字符,并按下回车,那么变量a将会正确接收输入的字符*/       scanf("%c",&b); /*但是变量b将会接收到回车符,其值为10,或者说ASCII码为10*/      

【例2】:        scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/        scanf("%d",&y); /*变量y不会接收到回车符,需要用户继续输入数字,并回车,正常接收到整数*/      

【例3】:      scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/        scanf("%c",&a); /*但是变量a将会接收到回车符,其值为10,或者说ASCII码为10*/
【例4】:        scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/        scanf("%d",&y); /*若此时输入的是字母而不是数字,比如输入“s”并回车*/                                  /*那么变量y将不会接收到任何字符或数字,其值保持原样,不发生任何改变*/        scanf("%c",&a); /*此时变量a将接收到上一步输入的字母*/                                  /*即变量a中存储的字符将是"s",而不是回车符*/
总结:可以用char a = getchar(); 或者 char a; scanf(“%c”,&a);消除回车键    (getchar()只能输入字符型,输入时遇到回车键才从缓冲区依次提取字符.)

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程