标题:
借助栈实现单链表逆置
时 限:
1000 ms
内存限制:
10000 K
总时限:
3000 ms
描述:
用链式存储实现栈的初始化、入栈、出栈、取栈顶、判栈空等操作,在主函数中借助栈的基本操作逆置单链表。
输入:
线性表的长度:n
该线性表中的元素:a1
a2
...
an
输出:
逆置后的线性表为:an
...
a2
a1
输入样例:
10
安弥邵 10000001 女 28 计43 一般
宰觅 10000002 男 23 计79 健康
顾健 10000003 男 27 计29 一般
宓顽芳 10000004 女 20 计17 健康
能纸垄 10000005 男 18 计11 健康
米倍庐 10000006 女 18 计38 神经衰弱
养句电 10000007 女 19 计96 神经衰弱
牛议 10000008 男 18 计92 一般
堵侥 10000009 男 27 计35 健康
支脸蕉 10000010 男 21 计58 健康
输出样例:
支脸蕉 10000010 男 21 计43 健康
堵侥 10000009 男 27 计79 健康
牛议 10000008 男 18 计29 一般
养句电 10000007 女 19 计17 神经衰弱
米倍庐 10000006 女 18 计11 神经衰弱
能纸垄 10000005 男 18 计38 健康
宓顽芳 10000004 女 20 计96 健康
顾健 10000003 男 27 计92 一般
宰觅 10000002 男 23 计35 健康
安弥邵 10000001 女 28 计58 一般
#include
#include
#include
typedef struct Student
{
char name[10];
char num[10];
char sex[3];
int
age;
char grade[10];
char health[10];
} StudentType;
typedef StudentType DataType;
typedef struct snode
{
DataType data;
struct snode
*next;
} LSNode;
void StackInitiate(LSNode **head)//初始化堆栈
{
*head=(LSNode
*)malloc(sizeof(LSNode));
(*head)->next=NULL;
}
int StackNotEmpty(LSNode *head)//判断堆栈非空
{
if(head->next==NULL)return 0;
else return 1;
}
int StackPush(LSNode *head,DataType x)//入栈
{
LSNode *p;
p=(LSNode
*)malloc(sizeof(LSNode));
p->data=x;
p->next=head->next;
head->next=p;
return 0;
}
int StackPop(LSNode *head,DataType *d)//出栈
{
LSNode
*p=head->next;
head->next=p->next;
*d=p->data;
free(p);
return 0;
}
//int StackTop(LSNode *head,DataType *d)//取堆栈顶元素
//{
// LSNode
*p=head->next;
//
// *d=p->data;
//
// return 1;
//}
int main(void)
{
LSNode *head;
int n;
int i;
DataType x;
StackInitiate(&head);
scanf("%d",&n);
for(i=0;
i
{
scanf("%s",x.name);
scanf("%s",x.num);
scanf("%s",x.sex);
scanf("%d",&x.age);
scanf("%s",x.grade);
scanf("%s",x.health);
StackPush(head,x);
}
while(StackNotEmpty(head))
{
StackPop(head,&x);
printf("%s %s %s %d %s
%s\n",x.name,x.num,x.sex,x.age,x.grade,x.health);
}
return 0;
}