实现代码:

单链表

  1. /******************************************************  
  2.     > File Name: Link.c  
  3.     > Author: wangqiang  
  4.     > Mail: windorman@gmail.com   
  5.     > Created Time: 2012年07月15日 星期日 19时58分38秒  
  6.  ******************************************************/ 
  7.  
  8. #include<stdio.h>  
  9. #include<stdlib.h>  
  10.  
  11. typedef char Elemtype;  
  12. typedef struct node{  
  13.     Elemtype data;  
  14.     struct node *next;  
  15. }LNode,*Linklist;  
  16.  
  17. Linklist Createlist(){  
  18.     Linklist p,r,list=NULL;  
  19.     Elemtype e;  
  20.     while(scanf("%c",&e),e!='#') {  
  21.         p=(Linklist)malloc(sizeof(LNode));  
  22.         p->data=e;  
  23.         p->next=NULL;  
  24.         if(!list)  
  25.             list=p;  
  26.         else 
  27.             r->next=p;  
  28.         r=p;  
  29.     }  
  30.     return list;  
  31. }  
  32.  
  33. int main(void)  
  34. {  
  35.     Linklist list;  
  36.     list=Createlist();  
  37.     while(list) {  
  38.         printf("%c",list->data);  
  39.         list=list->next;  
  40.     }  
  41. return 0;  
  42. }  

 

栈:

  1. /******************************************************  
  2.     > File Name: Stack_.c  
  3.     > Author: wangqiang  
  4.     > Mail: windorman@gmail.com   
  5.     > Created Time: 2012年07月15日 星期日 22时25分48秒  
  6.  ******************************************************/  
  7.  
  8. #include<stdio.h> 
  9. #include<stdlib.h> 
  10.  
  11. #define STACKSIZE 100  
  12. #define STACK 10  
  13.  
  14. typedef char Elemtype;  
  15. typedef struct {  
  16.     Elemtype *top;  
  17.     Elemtype *base;  
  18.     int stacksize;  
  19. }sqstack;  
  20.  
  21. void initstack(sqstack *s){  
  22.     s->base=(Elemtype *)malloc(STACKSIZE*sizeof(Elemtype));  
  23.     if(!s->base) exit(0);  
  24.     s->top=s->base;  
  25.     s->stacksize=STACKSIZE;  
  26. }  
  27.  
  28. void Push(sqstack *s,Elemtype e){  
  29.     if(s->top-s->base>=s->stacksize) {  
  30.         s->base=(Elemtype *)realloc(s->base,(s->stacksize+STACK)*sizeof(Elemtype));  
  31.         if(!s->base) exit(0);  
  32.         s->top=s->base+s->stacksize;  
  33.         s->stacksize+=STACK;  
  34.     }  
  35.     *(s->top)=e;  
  36.     s->top++;  
  37. }  
  38.  
  39. int stacklen(sqstack s){  
  40.     return (s.top-s.base);  
  41. }  
  42.  
  43. void Pop(sqstack *s,Elemtype *e){  
  44.     if(s->top==s->base) return;  
  45.     *e=*--(s->top);  
  46. }  
  47.  
  48. void DestroyStack(sqstack *s){  
  49.     int i,len;  
  50.     len=s->stacksize;  
  51.     for(i=0;i<len;i++){  
  52.         free(s->base);  
  53.         s->base++;  
  54.     }  
  55.     s->base=s->top=NULL;  
  56.     s->stacksize=0;  
  57. }  
  58.  
  59. int main()  
  60. {  
  61.     sqstack s;  
  62.     Elemtype e;  
  63.     int i,len;  
  64.     initstack(&s);  
  65.     while(scanf("%c",&e),e!='#'){  
  66.         Push(&s,e);  
  67.     }  
  68.     len=stacklen(s);  
  69.     for(i=0;i<len;i++){  
  70.         Pop(&s,&e);  
  71.         printf("%c",e);  
  72.     }  
  73.     printf("\n");  
  74.     DestroyStack(&s);  
  75.       
  76. return 0;  
  77. }  

 

队列:

  1. /******************************************************  
  2.     > File Name: Link.c  
  3.     > Author: wangqiang  
  4.     > Mail: windorman@gmail.com   
  5.     > Created Time: 2012年07月15日 星期日 19时58分38秒  
  6.  ******************************************************/  
  7. #include<stdio.h> 
  8. #include<stdlib.h> 
  9.  
  10. typedef char Elemtype;  
  11. typedef struct QNode{  
  12.     Elemtype data;  
  13.     struct QNode *next;  
  14. }QNode,*QPtr;  
  15. typedef struct{  
  16.     QPtr front;  
  17.     QPtr rear;  
  18. }QLink;  
  19.  
  20. void Cre(QLink *q){  
  21.     q->rear=q->front=(QPtr)malloc(sizeof(QNode));  
  22.     if(!q->front) exit(0);  
  23.     q->front->next=NULL;  
  24. }  
  25.  
  26. void EnQueue(QLink *q){  
  27.     Elemtype e;  
  28.     QPtr p;  
  29.     while(scanf("%c",&e),e!='#'){  
  30.         p=(QPtr)malloc(sizeof(QNode));  
  31.         p->data=e;  
  32.         p->next=NULL;  
  33.         q->rear->next=p;  
  34.         q->rear=p;  
  35.     }  
  36. }  
  37.  
  38. void DelQueue(QLink *q,Elemtype *e){  
  39.     QPtr p;  
  40.     if(!q->front) return;  
  41.     p=q->front->next;  
  42.     *e=p->data;  
  43.     q->front->next=p->next;  
  44.     if(p==q->rear) q->front=q->rear;  
  45. //  free(p);  
  46. }  
  47.  
  48. int main() {  
  49.     QLink q;  
  50.     Elemtype e;  
  51.     Cre(&q);  
  52.     EnQueue(&q);  
  53.     while(q.rear!=q.front){  
  54.         DelQueue(&q,&e);  
  55.         printf("%c",e);  
  56.     }  
  57.     return 0;  
  58. }