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

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值