下面这个程序是通过栈对顺序表(数组)逆置,你只要把它改为链表的就行了。
成都创新互联成立于2013年,是专业互联网技术服务公司,拥有项目网站制作、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元沭阳做网站,已为上家服务,为沭阳各地企业和个人服务,联系电话:028-86922220
#includeiostream
#includestdlib.h
#includestring
#includemalloc.h
using namespace std;
#define MAXSIZE 100
typedef int ElemType;
typedef struct
{
ElemType elem[MAXSIZE];
int top;
}Stack;
int initStack(Stack **s)
{
(*s)-top=-1;
return 0;
}
int push(Stack **s,ElemType elem)
{
if((*s)-top==MAXSIZE-1) return -1;
else
{
(*s)-top=(*s)-top+1;
(*s)-elem[(*s)-top]=elem;
}
return 0;
}
int pop(Stack **s,ElemType e)
{
if((*s)-top==-1)
{
cout"达到下界"endl;
return -1;
}
e=(*s)-elem[(*s)-top];
coute" ";
(*s)-top=(*s)-top-2;
while((*s)-top!=-1)
{
e=(*s)-elem[(*s)-top];
coute" ";
(*s)-top=(*s)-top-1;
}
coutendl;
return 0;
}
int isEmpty(Stack *s)
{
if (s-top==-1)
return 1;
else
return 0;
}
int main(void)
{
ElemType elem,e;
Stack *s=(Stack *)malloc(sizeof(Stack));
initStack(s);
cout"请依次输入你要存放在栈中的数"endl;
cinelem;
while(1)
{
push(s,elem);
if (getchar()=='#')
break;
cinelem;
}
cout"栈中的元素为:"endl;
while(!isEmpty(s))
{
pop(s,e);
}
return 0;
}
将链表逆置,例如
原链表:
1-2-3-4-5
逆置之后
5-4-3-2-1
使用栈,利用栈“后进先出”的特性。
当你把原链表按其 1 2 3 4 5的顺序入栈,再出栈时,顺序即为5 4 3 2 1
形成一个新的链表,达到逆置的目的。
Q出队列一个元素,此元素再入栈S,
队列出空后,开始依次弹栈,这样原队列就逆置了
你使用栈时SeqStack *S;没有指向任何存储单元。事实上,S=NULL(因为是全局变量,自动设为0),因此对其成员变量的引用(如S-base = (SElemType*) malloc (STACK_INIT_SIZE * sizeof(SElemType));)是错误的
即将
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
} SeqStack;
SeqStack *S;//本句改为 SeqStack *S=(SeqStack *S)malloc(sizeof(SeqStack));即可
或改为SeqStack Q,*S=Q;
或在int InitStack (SeqStack *S )中更改:更改为int InitStack (SeqStack *S ){S=(SeqStack *S)malloc(sizeof(SeqStack));
欢迎继续提问!
将队列中的元素顺序压栈,由于队列先进先出,而栈是后进先出,先进栈的就在栈底,而后进的就在栈顶,然后等到队列所有元素进入栈中,即队列为空时,再将栈中的元素顺序弹入队列,这样原先队列中最后进入栈的就在栈顶,而弹出栈后,进入队列就在队列头部,就可以实现队列的元素逆置。