//设置岗哨的方法
#include<stdio.h>
#include<stdlib.h>
#define SIZE 10
typedef struct node{
int data;
struct node *next;
}ElemSN;
ElemSN *Createlink(int a[])
{
ElemSN *h=NULL,*np;
for(int i=SIZE-1;i>=0;i--){
np=(ElemSN *)malloc(sizeof(ElemSN));
np->data=a[i];
np->next=h;
h=np;
}
return h;
}
void Prelink(ElemSN *head)
{
ElemSN *p,*endl=NULL;
while(endl-head){//判断岗哨位置是否等于head
for(p=head;p->next-endl;p=p->next);//每次让p跑到岗哨前驱
printf("%4d",p->data);
endl=p;//每次将岗哨前移
}
}
int main()
{
int i;
int *a;
ElemSN *head=NULL;
a=(int *)malloc(SIZE*sizeof(int));
//输入数组值
for(i=0;i<SIZE;i++)
{
scanf("%d",a+i);
}
//创建单向链表
head=Createlink(a);
//逆向输出
Prelink(head);
free(a);
return 0;
}
//用栈实现
#include<stdio.h>
#include<stdlib.h>
#define SIZE 10
typedef struct node{
int data;
struct node *next;
}ElemSN;
ElemSN *Createlink(int a[])
{
ElemSN *h=NULL,*np;
for(int i=SIZE-1;i>=0;i--){
np=(ElemSN *)malloc(sizeof(ElemSN));
np->data=a[i];
np->next=h;
h=np;
}
return h;
}
void Prelink(ElemSN *head,int top)
{
ElemSN **s;//指针s指向栈空间,栈空间存取结点地址
ElemSN *p;
s=(ElemSN **)malloc(SIZE*sizeof(ElemSN *));
for(p=head;p;p=p->next){
s[++top]=p;//入栈
}
while(top!=-1){
p=s[top--];//出栈
printf("%4d",p->data);
}
}
int main()
{
int top=-1;
int *a;
a=(int *)malloc(SIZE*sizeof(int));
ElemSN *head=NULL;
for(int i=0;i<SIZE;i++)
{
scanf("%d",a+i);
}
//创建链表
head=Createlink(a);
//实现要求的功能
Prelink(head,top);
free(a);
return 0;
}