#ifndef LINK_STACK_H
#define LINK_STACK_H
struct linkstack{
struct linkstack * next;
int content;
};
void display();
void push(struct linkstack * node);
struct linkstack * pop();
void init(int * array,int n);
#endif
#include <stdio.h>
#include <stdlib.h>
#include "linkstack.h"
/*
*link stack
*author @ suilingxi
*2014-1-28
*/
struct linkstack * head;
struct linkstack * tail;
int main(){
int array[10];
printf("please enter 10 number:\n");
for(int i=0;i<10;i++){
scanf("%d",&array[i]);
}
init(array,10);
while(1){
char c;
printf("i--push p--pop d--display\n");
printf("please enter one character:\n");
scanf("%c",&c);
if(c=='i'){
printf("please enter one nubmer:\n");
int temp=0;
scanf("%d",&temp);
struct linkstack * point;
point=(struct linkstack *)malloc(sizeof(struct linkstack));
point->content=temp;
push(point);
}else if(c=='p'){
if(head==NULL){
printf("nothing in the stack\n");
}else{
struct linkstack * out;
out=pop();
printf("pop out %d\n",out->content);
}
}else if(c=='d'){
display();
}
}
return 0;
}
void init(int * p , int n){
if(n==0){
head=NULL;
tail=NULL;
}else if(n>0){
struct linkstack * ptr;
ptr=(struct linkstack *)malloc(sizeof(struct linkstack));
ptr->content=*p;
ptr->next=NULL;
head=ptr;
tail=ptr;
for(int i=1;i<n;i++){
struct linkstack * node;
node=(struct linkstack *)malloc(sizeof(struct linkstack));
node->content=*(p+i);
node->next=NULL;
tail->next=node;
tail=node;
}
}
}
struct linkstack * pop(){
struct linkstack * tmp;
tmp=head;
while(tmp->next != tail){
tmp++;
}
tail=tmp;
tmp=tail->next;
tail->next=NULL;
return tmp;
}
void push(struct linkstack * node){
tail->next=node;
tail=node;
tail->next=NULL;
}
void display(){
struct linkstack * tmp;
tmp=head;
while(tmp != NULL){
printf("%d-->",tmp->content);
tmp=tmp->next;
}
printf("\n");
}