摘要:本文主要向大家介绍了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输入字符时,当输完以后,都习惯按一下回车,这时回车符就成了一个问题。
【例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+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号