链栈的操作,附一个行编辑器程序。
来源:互联网 发布:古剑奇谭二电视剧知乎 编辑:程序博客网 时间:2024/06/03 23:44
链式栈的各种操作。最后的两个函数为,行编辑器所用到的函数,其中exchange函数的功能是将栈中的元素倒置,这样才有利于输出。
#include<stdio.h>#include<stdlib.h>#include<malloc.h>//各种定义,才与教材的类型符合。typedef int Status;typedef char elemtype;#define OK 1#define ERROR -1//数据的存储结构的定义。typedef struct node{elemtype data;struct node *next;}linkstack;//各种函数的声明。linkstack * Init_stack(void);Status Push(linkstack *top,elemtype x);bool Stack_Empty(linkstack *s);Status print_stack(linkstack *s);Status Pop(linkstack *top,elemtype &e);Status DestroyStack(linkstack *top);Status Edit(void);linkstack * exchange(linkstack *top);int main(){Edit();return 0;}//栈的初始化,带有头结点,不带有头结点的链式栈太难写了,也难操作。linkstack * Init_stack(void){linkstack *top;top=(linkstack *)malloc(sizeof(linkstack) );top->data=-1;top->next=NULL;return top;}//入栈Status Push(linkstack *top,elemtype x){linkstack * newnode,*temp;newnode=(linkstack *)malloc(sizeof(linkstack) );newnode->data=x;newnode->next=top->next;top->next=newnode;return OK;}//出栈Status Pop(linkstack *top,elemtype &e){e=top->next->data;linkstack * temp;temp=top->next;top->next=temp->next;free(temp);return OK;}//输出栈的元素Status print_stack(linkstack *s){for(linkstack *p=s;Stack_Empty(p)==false;p=p->next)printf("%c",p->next->data);printf("\n");return OK;}//判断栈是否为空bool Stack_Empty(linkstack *top){if(top->next==NULL)return true;elsereturn false;}//销毁栈的函数Status DestroyStack(linkstack *top){elemtype temp;while(top->next!=NULL)Pop(top,temp);return OK;}/*行编辑器的函数,此函数完成调用各种函数的功能。包括栈的初始化,入栈和出栈等功能,main函数就只用来调用次函数就好了,所以我的main函数就只有句语句啦!*/Status Edit(void){elemtype ch;linkstack *top;top=Init_stack();ch=getchar();while(ch!=EOF&&ch!='\n'){switch(ch){case '#':Pop(top,ch);break;case '@':DestroyStack(top);break;default:Push(top,ch);}ch=getchar();}//print_stack(top);top=exchange(top);print_stack(top);return OK;}//此算法功能是将栈倒置。例如栈中元素1234567倒置成7654321.linkstack * exchange(linkstack *top){linkstack * stack_A;stack_A=Init_stack();elemtype temp;while(Stack_Empty(top)==false){Pop(top,temp);Push(stack_A,temp);}return stack_A;}
- 链栈的操作,附一个行编辑器程序。
- 一个简单的链表操作程序
- 一个清除自定义通知的小程序【原创.附源代码】
- 一个旧的验证码破解程序[附源码]
- 很久之前写的一个分页程序,附CSS
- 一个HashTable操作的程序
- BufferedWriter 和 BufferedReader 的基本用法,附演示程序。以及一个复制文本文件的程序
- Vim 程序编辑器 常用操作
- 一个移位操作引发的程序Bug
- 一个小小的操作空调程序
- 我用Silverlight做的一个简单的浏览图片的程序(附源码)
- java简单小结(附一个java实现的生产者消费者问题的程序)
- 在VC6中使用GDI的方法(附一个使用GDI+的批量图片格式转换程序)
- 一个消息提示托盘程序的开发历程(采用socket技术,附源代码)一
- Nokia系列手机上的一个手电筒J2ME程序(附源代码)
- 一起来学J2ME_1:撰写一个手机系统属性显示程序 (附jad文件的错误代码)
- 一个可以查看HTML网页上密码框的程序(附源码)
- 一个去除视频前景,保留背景的 opencv 小程序 (附注释)
- Lucene4.3入门
- hdu 3685 Rotational Painting
- HDU 2795 Billboard / 线段树单点更新
- 运输层TCP协议详细介绍
- Virtualbox虚拟Ubuntu共享文件夹设置
- 链栈的操作,附一个行编辑器程序。
- win7 右键无法新建txt
- Windows Socket 非阻塞模式开发
- Windows socket之Select模型开发
- Windows socket基础
- 不能将参数 1 从“const char [17]”转换为“LPCWSTR”
- Linux学习的一些技巧
- Windows socket 之WSAAsyncSelect模型
- C++命名规则