这个程序时是要在终端下面运行的,编译程序之后:输入: ./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 */