扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
#includestdio.h
成都创新互联制作网站网页找三站合一网站制作公司,专注于网页设计,做网站、成都网站设计,网站设计,企业网站搭建,网站开发,建网站业务,680元做网站,已为上千家服务,成都创新互联网站建设将一如既往的为我们的客户提供最优质的网站建设、网络营销推广服务!
int main(){
char s[1000];
int i=0;
scanf("%c",s[i]);
while(s[i]!='\n'){
scanf("%c",s[++i]);
if(s[i]==s[i-1])
i-=2;
}
s[i]='\0';
if(s[0])puts(s);
else printf("None");
}
#include stdio.h
#include stdlib.h
#include string.h
typedef int DataType;
typedef struct node{
DataType data;
struct node * next;
}Stack;
Stack* CreateStack(); //创建栈
void StackEmpty(Stack* ); //清空栈
void DestoryStack(Stack*); //撤销(删除)栈
int IsEmpty(Stack*); //判空
int PushStack(Stack*, DataType); //入栈
int PopStack(Stack*); //出栈
DataType GetTopElement(Stack*); //取栈顶元素
Stack* CreateStack()
{
Stack *stack = (Stack*)malloc(sizeof(Stack));
if(NULL != stack)
{
stack-next = NULL;
return stack;
}
printf("out of place.\n");
return NULL;
}
//清空栈
void StackEmpty(Stack* stack)
{
while(!IsEmpty(stack))
{
PopStack(stack);
}
printf("now stack is empty. \n");
}
//撤销栈
void DestoryStack(Stack* stack)
{
free(stack);
exit(0);
}
int IsEmpty(Stack* stack)
{
return (stack-next == 0);
}
//入栈,成功返回1,失败返回0, 把元素 data 存入 栈 stack 中
int PushStack(Stack* stack, DataType data)
{
Stack* newst = (Stack*)malloc(sizeof(Stack));
if(NULL != newst)
{
newst-data = data;
newst-next = stack-next; //s-next = NULL;
stack-next = newst;
return 1;
}
printf("out of place PushStack.\n");
return 0;
}
/*
出栈,成功返回1,失败返回0,出栈不取出元素值,只是删除栈顶元素。
如出栈要实现,取出元素值,并释放空间,可结合取栈顶元素函数做修改,这里不再给出。
*/
int PopStack(Stack* stack)
{
Stack* tmpst;
if(!IsEmpty(stack))
{
tmpst = stack-next;
stack-next = tmpst-next;
free(tmpst);
return 1;
}
return 0;
}
//取栈顶元素,仅取出栈顶元素的值,取出之后,该元素,任然存在栈中。成功返回元素值,失败输出提示信息,并返回 -1
DataType GetTopElement(Stack* stack)
{
if(!IsEmpty(stack))
{
return stack-next-data;
}
printf("stack is empty GetTopElement.\n");
return -1;
}
int main()
{
Stack* stack = CreateStack();
char str[200];
printf("请输入字符串:");
scanf("%s", str);
int num = 0;
for (int i = 0; i strlen(str); i++) {
if (!IsEmpty(stack) GetTopElement(stack) == '(' str[i] == ')') {
PopStack(stack);
num++;
} else {
PushStack(stack, str[i]);
}
}
if (!IsEmpty(stack)) {
num = -1;
}
printf("匹配结果:%d", num);
DestoryStack(stack);
return 1;
}
#include stdio.h
#include conio.h
#include stdlib.h
#define elemType int /* 链栈元素数据类型 */
#define SNODE_SIZE sizeof (struct sNode) /* 链栈结点空间大小 */
#define status int /* 状态型变量 */
#define OVERFLOW -1 /* 内存溢出状态码 */
#define ERROR 0 /* 错误状态码 */
#define OK 1 /* 正确状态码 */
/* 链栈结点存储结构 */
typedef struct sNode {
elemType data;
struct sNode *next;
} sNode, *sNodePtr;
/* 链栈存储结构 */
typedef struct linkStack {
sNodePtr top; /* 栈顶指针 */
} linkStack;
/* 初始化 */
/* 操作结果:构造一个带头结点的空链栈S */
void initStack (linkStack *S) {
S-top = (sNodePtr) malloc (SNODE_SIZE); /* 产生头结点,栈顶指针指向此头结点 */
if (!S-top) /* 内存分配失败 */
exit (OVERFLOW);
S-top-next = NULL;
}
/* 销毁 */
/* 初始条件:链栈S已存在。操作结果:销毁链栈S */
void destroyStack (linkStack *S) {
sNodePtr p, q;
p = S-top; /* p指向S的头结点 */
while (p) {
q = p-next; /* q指向p的下一个结点 */
free (p); /* 回收p指向的结点 */
p = q; /* p移动到下一个结点 */
} /* 直到没有下一个结点 */
}
/* 清空 */
/* 初始条件:链栈S已存在。操作结果:将S重置为空栈 */
void clearStack (linkStack *S) {
sNodePtr p, q;
p = S-top-next; /* p指向栈的第一个结点 */
while (p) {
q = p-next; /* q指向p的下一个结点 */
free (p); /* 回收p指向的结点 */
p = q; /* p移动到下一个结点 */
} /* 直到没有下一个结点 */
S-top-next = NULL;
}
/* 判断链栈是否为空 */
/* 初始条件:链栈S已存在。操作结果:若S为空链栈,则返回TRUE,否则返回FALSE */
status stackIsEmpty (linkStack *S) {
return S-top-next == NULL;
}
/* 入栈 */
/* 操作结果:在S的栈顶插入新的元素e */
status push (linkStack *S, elemType e) {
sNodePtr p;
p = (sNodePtr) malloc (SNODE_SIZE); /* 产生新结点 */
if (!p) /* 内存分配失败 */
exit (OVERFLOW);
p-data = e;
p-next = S-top-next; /* 将新结点链接到原栈顶 */
S-top-next = p; /* 栈顶指向新结点 */
}
/* 打印栈内容 */
/* 初始条件:链栈S已存在。操作结果:当栈不为空时,打印栈内容并返回OK,否则返回ERROR */
status printStack (linkStack *S) {
sNodePtr p;
if (stackIsEmpty (S)) {
puts ("The stack is empty! ");
return ERROR;
}
p = S-top-next;
while (p) {
printf ("%d\t", p-data);
p = p-next;
}
putchar ('\n');
return OK;
}
int main (void) {
linkStack S;
elemType e;
elemType a, b, c, d;
a = 1; b = 2; c = 3; d = 4;
initStack (S);
push (S, a);
push (S, b);
push (S, c);
push (S, d);
printf ("S:\t");
printStack (S);
putchar ('\n');
puts ("Clear the stack");
clearStack (S);
printf ("S:\t");
printStack (S);
destroyStack (S);
getch (); /* 屏幕暂留 */
return 0;
}
如有问题,点击头像联系我
你这个栈是一个顺序栈,base是其所占内存的首地址,当然free(s-base)会把整个栈所占内存都释放,栈不仅仅是空了(象杯子中没有了水),而且变没了(连杯子都只剩下个底座了)。可以这样做,但是一定注意:对应的结构体中stacksize要置为0。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流