栈实现反序读文件

这个程序时是要在终端下面运行的,编译程序之后:输入: ./a.out  /etc/passwd,就能将passwd文件倒着输出来微笑
/*
 * func.c
 *
 *  Created on: 2012-12-12
 *      Author: wzm
 */
#include"head.h"
void Initialize(Pstack myStack)
{
    bom=NULL;
    top=NULL;
    ssize=0;
}
int Pushstack(Pstack myStack,char *a)//客栈的遍历最好从上为往下遍历
{
    Pnode new_node=(Pnode)malloc(sizeof(Pnode));//无论是链表还是客栈,首先做的是分配内存
    strcpy(new_node->a,a);
    new_node->next=NULL;//它总是指向客栈的顶端
    if(ssize==0)
    {
        bom=new_node;
        top=new_node;

    }
    else
    {
        new_node->next=top;//这个的意思是向下指
        top=new_node;
    }
    ssize+=1;
    return ssize;
}
void Popstack(Pstack myStack)
{
    Pnode node=top;
    if(node==bom)
    {
        top=NULL;
        bom=NULL;
        puts("客栈为空,无需弹出");
        printf("ssize=%d\n",ssize);
        return;
    }
    else
    {
        top=node->next;
        //free(node->data);
        //free(node->d);
        free(node);
        printf("ssize=%d\n",ssize);
        ssize--;
    }
}
void Display(Pstack myStack)
{
    Pnode tmp=top;
    if(ssize==0)
    {
        puts("空的!");
        return;
    }
    else
    {
        do
        {
            printf("data=%s\n",tmp->a);
            tmp=tmp->next;//从上往下执行的
        }while(tmp!=bom);
    }
}
void Destorystack(Pstack myStack)
{
    Pnode node=top;
    if(ssize==0)
    {
        top=NULL;
        bom=NULL;
        puts("客栈为空,无需销毁");
        printf("ssize=%d",ssize);
        return;
    }
    else
    {
        while(ssize!=0)
        {
            Popstack(myStack);
        }
    }
    return;
}




#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define bom myStack->bottom
#define top myStack->ttop
#define ssize myStack->stack_size
typedef struct element
{
    char a[1024];
    struct element *next;
}*Pnode;

typedef struct stack_element
{
    struct stack_element *bottom;
    unsigned int stack_size;//记录元素个数
    struct stack_element *ttop;
}*Pstack;
void Initialize(Pstack);
int Pushstack(Pstack,char *);
void Popstack(Pstack);
void Display(Pstack);
void Destorystack(Pstack);

/*
 ============================================================================
 Name        : stack.c
 Author      : 
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#include"head.h"
int tac(FILE *ffp,Pstack myStack)
{
	int sum=ssize;
	char s[1024];
	while(fgets(s,1024,ffp)!=NULL)
	{
		Pushstack(myStack,s);
	}
	Display(myStack);
	fclose(ffp);
	return sum;
}
int main(int argc,char *argv[]) {
	//Pstack my=(Pstack)malloc(sizeof(Pstack)*2);//这里如果用的是指针,则先得先分配空间
	struct stack_element my;//如果不是指针,就不需要
	Initialize(&my);
	if(argc!=2)
	{
		fprintf(stderr,"Usage conmmand\n");
		return -1;
	}
	FILE *fp;
	fp=fopen(argv[1],"r");
	if(fp==NULL)
	{
		//perror也是可以显示文件错误的
		fprintf(stderr,"Usage conmmand %s\n",argv[1]);
	}
	else
	{
		tac(fp,&my);
	}
	return EXIT_SUCCESS;
}
 /*
实现结果:
data=jetty:x:110:110::/usr/share/jetty:/sbin/nologin
data=wzm:x:1000:1
data=tcpdump:x:72
data=chrony:x:993
data=sshd:x:74:74
data=smmsp:x:51:5
data=mailnull:x:4
data=nm-openconne
data=gdm:x:42:42:
data=saslauth:x:9
data=openvpn:x:99
data=colord:x:997
data=pulse:x:998:
data=rtkit:x:172:
data=avahi:x:70:7
data=abrt:x:173:1
data=dbus:x:81:81
data=avahi-autoip
data=smolt:x:999:
data=usbmuxd:x:11
data=nobody:x:99:
data=ftp:x:14:50:
data=gopher:x:13:
data=games:x:12:1
data=operator:x:1
data=uucp:x:10:14
data=mail:x:8:12:
data=halt:x:7:0:h
data=shutdown:x:6
data=sync:x:5:0:s
data=lp:x:4:7:lp:
data=adm:x:3:4:ad
data=daemon:x:2:2
data=bin:x:1:1:bi */


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值