#ifndef HEAD_H_
#define HEAD_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 1024
typedef struct _Node //声明结点模板。
{
char buff [SIZE]; //结点值 类型为字符串。
struct _Node *next;
}Node,*pNode;
typedef struct _Stack //声明 栈 模板。
{
struct _Node *top;
struct _Node *bottom;
unsigned int size; //记录栈中结点个数。
}Stack,*pStack;
void Initialize (pStack MyStack);
int Push_Stack (pStack MyStack,char *a);
void Display_Stack (pStack MyStack);
int Tac (FILE* ffp,pStack MyStack);
#endif /* HEAD_H_ */
#include "head.h"
void Initialize (pStack MyStack) //初始化。
{
MyStack->bottom = NULL;
MyStack->size = 0;
MyStack->top = NULL;
}
int Push_Stack (pStack MyStack,char *a) //压栈。并定义一个字符串类型的形式参量。
{
pNode ptr = (pNode)malloc (sizeof (Node));
ptr->next = NULL;
strcpy (ptr->buff,a); //赋值。
MyStack->size++;
if (MyStack->top == NULL)
{
MyStack->bottom =ptr;
MyStack->top = ptr;
}
else
{
ptr->next = MyStack->top;
MyStack->top = ptr;
}
return MyStack->size;
}
void Display_Stack (pStack MyStack) //打印
{
pNode ptr = MyStack->top;
if (ptr == NULL)
{
return;
}
else
{
do
{
printf ("%s\n",ptr->buff);
ptr = ptr->next;
}while (ptr != NULL);
}
}
#include "head.h"
int Tac (FILE* ffp,pStack MyStack) //实现反序读出文件。
{
char buff1 [SIZE];
int sum = MyStack->size;
while (fgets (buff,SIZE,ffp) != NULL)
{
Push_Stack (MyStack,buff1);
}
Display_Stack (MyStack);
fclose (ffp);
return sum;
}
int main (int argc,char* argv[]) //主函数有命令行参数,得在终端下面运行。
{
Stack ms;
FILE* fp;
Initialize (&ms);
if (argc != 2)
{
perror ("Usage commend <filename>");
}
else
{
if ((fp = fopen (argv[1],"r")) == NULL)
{
perror ("Open fail\n");
}
else
{
Tac (fp,&ms);
}
}
return EXIT_SUCCESS;
}