数据第四章知识点Word格式.docx
- 文档编号:19925618
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:36
- 大小:22.06KB
数据第四章知识点Word格式.docx
《数据第四章知识点Word格式.docx》由会员分享,可在线阅读,更多相关《数据第四章知识点Word格式.docx(36页珍藏版)》请在冰豆网上搜索。
if(PopStack(&
S,&
e)==1)
printf("
%4c"
e);
\n"
当前栈顶的元素是:
if(GetTop(S,&
e)==0)
栈已空!
else
%4c\n"
S,'
f'
)==0)
g'
当前栈中的元素个数是:
%d\n"
StackLength(S));
元素出栈的序列是:
while(!
StackEmpty(S))
PopStack(&
e);
}
重点一:
#defineStackSize100
typedefstruct
DataTypestack[StackSize];
inttop;
}SeqStack;
voidInitStack(SeqStack*S)
/*将栈初始化为空栈只需要把栈顶指针top置为0*/
S->
top=0;
/*把栈顶指针置为0*/
intStackEmpty(SeqStackS)
/*判断栈是否为空,栈为空返回1,否则返回0*/
if(S.top==0)/*判断栈顶指针top是否为0*/
return1;
/*当栈为空时,返回1;
否则返回0*/
return0;
intGetTop(SeqStackS,DataType*e)
/*取栈顶元素。
将栈顶元素值返回给e,并返回1表示成功;
否则返回0表示失败。
*/
if(S.top<
=0)/*在取栈顶元素之前,判断栈是否为空*/
栈已经空!
else
*e=S.stack[S.top-1];
/*在取栈顶元素*/
intPushStack(SeqStack*S,DataTypee)
/*将元素e进栈,元素进栈成功返回1,否则返回0.*/
if(S->
top>
=StackSize)/*在元素进栈前,判断是否栈已经满*/
S->
stack[S->
top]=e;
/*元素e进栈*/
top++;
/*修改栈顶指针*/
intPopStack(SeqStack*S,DataType*e)
/*出栈操作。
将栈顶元素出栈,并将其赋值给e。
出栈成功返回1,否则返回0*/
if(S->
top<
=0)/*元素出栈之前,判断栈是否为空*/
栈已经没有元素,不能出栈!
top--;
/*先修改栈顶指针,即出栈*/
*e=S->
top];
/*将出栈元素赋值给e*/
intStackLength(SeqStackS)
/*求栈的长度,即栈中元素个数,栈顶指针的值就等于栈中元素的个数*/
returnS.top;
例二:
/*包含头文件*/
/*类型定义*/
SSeqStack.h"
/*包含栈的基本类型定义和基本操作实现*/
intGetTop(SSeqStackS,DataType*e,intflag);
intStackEmpty(SSeqStackS,intflag);
SSeqStackS1,S2;
/*定义一个栈*/
DataTypeb[]={'
x'
y'
z'
r'
DataTypee1,e2;
S1);
/*初始化栈*/
S2);
i++)/*将数组a中元素依次进栈*/
S1,a[i],0)==0)
sizeof(b)/sizeof(b[0]);
S2,b[i],1)==0)
}
if(GetTop(S1,&
e1,0)==0)
栈已空"
return;
if(GetTop(S2,&
e2,1)==0)
栈S1的栈顶元素是:
%c,栈S2的栈顶元素是:
%c\n"
e1,e2);
S1出栈的元素次序是:
i=0;
StackEmpty(S1,0))/*将数组a中元素依次进栈*/
S1,&
e1,0);
e1);
S2出栈的元素次序是:
StackEmpty(S2,1))/*将数组a中元素依次进栈*/
PopStack(&
S2,&
e2,1);
e2);
intGetTop(SSeqStackS,DataType*e,intflag)
switch(flag)
case0:
if(S.top[0]==0)
return0;
*e=S.stack[S.top[0]-1];
break;
case1:
if(S.top[1]==StackSize-1)
*e=S.stack[S.top[1]+1];
default:
return0;
intStackEmpty(SSeqStackS,intflag)
return1;
重点二:
inttop[2];
}SSeqStack;
voidInitStack(SSeqStack*S)
/*共享栈的初始化操作*/
top[0]=0;
top[1]=StackSize-1;
intPushStack(SSeqStack*S,DataTypee,intflag)
/*共享栈进栈操作。
进栈成功返回1,否则返回0*/
top[0]==S->
top[1])/*在进栈操作之前,判断共享栈是否为空*/
switch(flag)
/*当flag为0,表示元素要进左端的栈*/
top[0]]=e;
/*元素进栈*/
top[0]++;
/*修改栈顶指针*/
break;
/*当flag为1,表示元素要进右端的栈*/
top[1]]=e;
top[1]--;
return1;
intPopStack(SSeqStack*S,DataType*e,intflag)
switch(flag)/*在出栈操作之前,判断是哪个栈要进行出栈操作*/
top[0]==0)/*左端的栈为空,则返回0,表示出栈操作失败*/
top[0]--;
/*修改栈顶指针*/
top[0]];
/*将出栈的元素赋值给e*/
top[1]==StackSize-1)/*右端的栈为空,则返回0,表示出栈操作失败*/
top[1]++;
/*修改栈顶指针*/
top[1]];
例三:
#include<
string.h>
LinkStack.h"
LinkStackS;
LStackNode*s;
DataTypech[50],e,*p;
请输入进栈的字符:
gets(ch);
p=&
ch[0];
while(*p)
PushStack(S,*p);
p++;
PopStack(S,&
重点三:
typedefstructnode
DataTypedata;
structnode*next;
}LStackNode,*LinkStack;
voidInitStack(LinkStack*top)
/*将链栈初始化为空。
动态生成头结点,并将头结点的指针域置为空。
if((*top=(LinkStack)malloc(sizeof(LStackNode)))==NULL)/*为头结点分配一个存储空间*/
exit(-1);
(*top)->
next=NULL;
/*将链栈的头结点指针域置为空*/
intStackEmpty(LinkStacktop)
/*判断链栈是否为空,就是通过判断头结点的指针域是否为空*/
if(top->
next==NULL)/*判断链栈头结点的指针域是否为空*/
/*当链栈为空时,返回1;
intPushStack(LinkStacktop,DataTypee)
/*进栈操作就是要在链表的第一个结点前插入一个新结点,进栈成功返回1*/
LStackNode*p;
/*定义指向第i个元素的前驱结点指针pre,指针p指向新生成的结点*/
if((p=(LStackNode*)malloc(sizeof(LStackNode)))==NULL)
内存分配失败!
exit(-1);
p->
data=e;
/*指针p指向头结点*/
next=top->
next;
top->
next=p;
intPopStack(LinkStacktop,DataType*e)
/*删除单链表中的第i个位置的结点。
删除成功返回1,失败返回0*/
LStackNode*p;
p=top->
if(!
p)/*判断链栈是否为空*/
next=p->
/*将栈顶结点与链表断开,即出栈*/
*e=p->
data;
/*将出栈元素赋值给e*/
free(p);
/*释放p指向的结点*/
intStackLength(LinkStacktop)
intcount=0;
p=top;
while(p->
next!
=NULL)
p=p->
count++;
returncount;
voidDestroyStack(LinkStacktop)
LStackNode*p,*q;
p)
q=p;
free(q);
intGetTop(LinkStacktop,DataType*e)
*e=p->
例四:
malloc.h>
string.h"
/*宏定义和链栈类型定义*/
#include"
/*包含链栈实现文件*/
intMatch(DataTypee,DataTypech);
char*p;
DataTypech[60];
/*初始化链栈*/
请输入带括号的表达式('
{}'
[]'
()'
).\n"
p=ch;
switch(*p)
{
case'
('
:
['
{'
PushStack(S,*p++);
break;
)'
]'
}'
if(StackEmpty(S))
{
printf("
缺少左括号.\n"
return;
}
else
GetTop(S,&
if(Match(e,*p))
PopStack(S,&
else
{
printf("
左右括号不配对.\n"
return;
}
default:
p++;
}
if(StackEmpty(S))
括号匹配.\n"
缺少右括号.\n"
intMatch(DataTypee,DataTypech)
if(e=='
&
ch=='
)
return1;
elseif(e=='
重点四:
intStackEmpty(LinkStacktop)
例五:
voidLineEdit();
voidLineEdit()
charch;
DataTypea[50];
inti,j=0;
输入字符序列(#表示前一个字符无效,@表示当前行字符无效).\n"
ch=getchar();
while(ch!
='
\n'
{
switch(ch)
case'
#'
if(!
PopStack(&
ch);
break;
@'
ClearStack(&
default:
PushStack(&
S,ch);
ch=getchar();
S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 第四 知识点