//数据结构C语言版(清华大学_唐国民_第3版)
//栈的顺序存储,书 P55 例子3.2.4 顺序栈逆置带头结点的单链表,与书上代码有些许出入,不用在意,重要的是思路
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 100
typedef struct SNode* Stack;
typedef struct Node* Link;
struct SNode{
int Data[Maxsize];
int Top;
};
struct Node{
int Data;
Link Next;
};
Stack StackCreate();
void Push(Stack,Link);
int Pop(Stack);
Link LinkCreate();
void LinkInput(Link);
void LinkPrint(Link);
void LinkReverse(Stack,Link);
int main()
{
Stack s;
Link Ptrl;
s = StackCreate();
Ptrl = LinkCreate();
printf("Please input these numbers in order to set a link(end with 0).\n");
LinkInput(Ptrl);
printf("The established link's numbers are as follows:\n");
LinkPrint(Ptrl);
Push(s,Ptrl);
LinkReverse(s,Ptrl);
printf("The reversed link's numbers are as follows:\n");
LinkPrint(Ptrl);
return 0;
}
Stack StackCreate()
{
Stack s;
s = (Stack)malloc(sizeof(struct SNode));
s->Top = -1;
}
Link LinkCreate()
{
Link Ptrl;
Ptrl = (Link)malloc(sizeof(struct Node));
Ptrl->Next = NULL;
}
void LinkInput(Link Ptrl)
{
Link New,p;
int data;
p = Ptrl;
scanf("%d",&data);
while(data != 0){
New = (Link)malloc(sizeof(struct Node));
New->Data = data;
New->Next = p->Next;
p->Next = New;
p = New;
scanf("%d",&data);
}
}
void LinkPrint(Link Ptrl)
{
Link p;
p = Ptrl->Next;
while(p!= NULL){
printf("%d\t",p->Data);
p = p->Next;
}
putchar('\n');
}
void Push(Stack s, Link Ptrl)
{
Link p;
p = Ptrl->Next;
if(s->Top == Maxsize-1){
printf("The stack overflows.\n");
return;
}
else{
while(p != NULL){
s->Data[++s->Top] = p->Data;
p = p->Next;
}
}
}
int Pop(Stack s)
{
int i;
if(s->Top == -1){
printf("The stack is empty!\n");
}
else{
i = s->Data[s->Top--];
return i;
}
}
void LinkReverse(Stack s ,Link Ptrl){
Link p;
p = Ptrl->Next;
while(p != NULL && s->Top != -1){
p->Data = Pop(s);
p = p->Next;
}
}
04-30
1231
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-14
1985
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交