原创 用堆栈实现逆置的程序

2010-1-18 18:12 2559 10 10 分类: 软件与OS

#include <stdio.h>


# include<stdlib.h>


#define stacksize 100


typedef int datatype;


typedef struct


{


   datatype data[stacksize];


        int  top;


}seqstack;


typedef struct node{


   datatype  data;


   struct node *next;


}listnode;


typedef listnode *linklist;


linklist head;


linklist p;


int count;


linklist creatlist(int n) //创建链表


{


  linklist head;


  listnode *p1,*p2;


  int i;


  head=(linklist)malloc(sizeof(listnode));


  head->next=NULL; 


  p2=head;


  printf("Please input the records of the chain!\n"); //输入节点值


  for(i=0;i<n;i++)


  {


     p1=(linklist)malloc(sizeof(listnode));


     scanf("%d",&p1->data);


     p1->next=p2->next;


     p2->next=p1;


     p2=p1;


  }


   return (head);


}


void print(linklist head,int n) //输出链表节点



  if(head==NULL)


           printf("list null!\n");


  printf("Now these %d records are:\n",n);


  p="head-">next;


  printf("%4d",p->data);


  count="1";


  while(p->next!=NULL)


  {


      count++;


      p="p-">next;


      printf("%4d",p->data);


      if(!(count%10))


             printf("\n");


  }


}


datatype push(seqstack *s,int x)    //进栈


 {


  if(s->top==stacksize-1)


     {  printf("The stack is overflow!\n");


 


return 0;}


 else


             s->data[++s->top]=x;  


          return (s,x);


 }


datatype pop(seqstack *s)  //出栈


 {


   if(s->top==-1)


    {printf("the stack is empty!\n");


       return 0;


}


  else


           return (s->data[s->top--]);


 }


datatype deleted(linklist head)  //腾出空间子函数


{


    datatype temp;


    linklist p;


    p="head-">next;


    temp=(p->data);


    head->next=p->next;


    free(p);


    return (temp);


}


void invertedlist(linklist head,int n) //逆置子函数


{    


    seqstack s;


    int i,j,temp;


    s.top=-1;


    for(i=0;i<n;i++)


    {


       temp="deleted"(head);   


       push(&s,temp);        //将元素进栈


    }


    for(i=0;i<n;i++)


    {


       temp="pop"(&s);   //将元素出栈


       printf("%5d",temp);


       if(!((i+1)%10))


                printf("\n");


    }


    printf("\n");



 


 


main()


{


    linklist head;


    int n;


    printf("Please input the value of n:\n");


    scanf("%d",&n);


    head="creatlist"(n);


    print(head,n); 


    printf("\n");


    printf("After inverting,the records of the chain are:\n"); //输出逆置结果


    invertedlist(head,n);


    //system("pause"); //vc++中使用


    return 0;



8bc65948-ee4e-4582-8735-c4ee0679b6d6.jpg

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条