用 栈结构 实现反序读文件。

#ifndef HEAD_H_
#define HEAD_H_
#include 
#include 
#include 
#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 ");
	}

	else
	{
		if ((fp = fopen (argv[1],"r")) == NULL)
		{
			perror ("Open fail\n");
		}

		else
		{
			Tac (fp,&ms);
		}
	}
	return EXIT_SUCCESS;
}

你可能感兴趣的:(数据结构。)