实现代码:
单链表
- /******************************************************
- > File Name: Link.c
- > Author: wangqiang
- > Mail: windorman@gmail.com
- > Created Time: 2012年07月15日 星期日 19时58分38秒
- ******************************************************/
- #include<stdio.h>
- #include<stdlib.h>
- typedef char Elemtype;
- typedef struct node{
- Elemtype data;
- struct node *next;
- }LNode,*Linklist;
- Linklist Createlist(){
- Linklist p,r,list=NULL;
- Elemtype e;
- while(scanf("%c",&e),e!='#') {
- p=(Linklist)malloc(sizeof(LNode));
- p->data=e;
- p->next=NULL;
- if(!list)
- list=p;
- else
- r->next=p;
- r=p;
- }
- return list;
- }
- int main(void)
- {
- Linklist list;
- list=Createlist();
- while(list) {
- printf("%c",list->data);
- list=list->next;
- }
- return 0;
- }
栈:
- /******************************************************
- > File Name: Stack_.c
- > Author: wangqiang
- > Mail: windorman@gmail.com
- > Created Time: 2012年07月15日 星期日 22时25分48秒
- ******************************************************/
- #include<stdio.h>
- #include<stdlib.h>
- #define STACKSIZE 100
- #define STACK 10
- typedef char Elemtype;
- typedef struct {
- Elemtype *top;
- Elemtype *base;
- int stacksize;
- }sqstack;
- void initstack(sqstack *s){
- s->base=(Elemtype *)malloc(STACKSIZE*sizeof(Elemtype));
- if(!s->base) exit(0);
- s->top=s->base;
- s->stacksize=STACKSIZE;
- }
- void Push(sqstack *s,Elemtype e){
- if(s->top-s->base>=s->stacksize) {
- s->base=(Elemtype *)realloc(s->base,(s->stacksize+STACK)*sizeof(Elemtype));
- if(!s->base) exit(0);
- s->top=s->base+s->stacksize;
- s->stacksize+=STACK;
- }
- *(s->top)=e;
- s->top++;
- }
- int stacklen(sqstack s){
- return (s.top-s.base);
- }
- void Pop(sqstack *s,Elemtype *e){
- if(s->top==s->base) return;
- *e=*--(s->top);
- }
- void DestroyStack(sqstack *s){
- int i,len;
- len=s->stacksize;
- for(i=0;i<len;i++){
- free(s->base);
- s->base++;
- }
- s->base=s->top=NULL;
- s->stacksize=0;
- }
- int main()
- {
- sqstack s;
- Elemtype e;
- int i,len;
- initstack(&s);
- while(scanf("%c",&e),e!='#'){
- Push(&s,e);
- }
- len=stacklen(s);
- for(i=0;i<len;i++){
- Pop(&s,&e);
- printf("%c",e);
- }
- printf("\n");
- DestroyStack(&s);
- return 0;
- }
队列:
- /******************************************************
- > File Name: Link.c
- > Author: wangqiang
- > Mail: windorman@gmail.com
- > Created Time: 2012年07月15日 星期日 19时58分38秒
- ******************************************************/
- #include<stdio.h>
- #include<stdlib.h>
- typedef char Elemtype;
- typedef struct QNode{
- Elemtype data;
- struct QNode *next;
- }QNode,*QPtr;
- typedef struct{
- QPtr front;
- QPtr rear;
- }QLink;
- void Cre(QLink *q){
- q->rear=q->front=(QPtr)malloc(sizeof(QNode));
- if(!q->front) exit(0);
- q->front->next=NULL;
- }
- void EnQueue(QLink *q){
- Elemtype e;
- QPtr p;
- while(scanf("%c",&e),e!='#'){
- p=(QPtr)malloc(sizeof(QNode));
- p->data=e;
- p->next=NULL;
- q->rear->next=p;
- q->rear=p;
- }
- }
- void DelQueue(QLink *q,Elemtype *e){
- QPtr p;
- if(!q->front) return;
- p=q->front->next;
- *e=p->data;
- q->front->next=p->next;
- if(p==q->rear) q->front=q->rear;
- // free(p);
- }
- int main() {
- QLink q;
- Elemtype e;
- Cre(&q);
- EnQueue(&q);
- while(q.rear!=q.front){
- DelQueue(&q,&e);
- printf("%c",e);
- }
- return 0;
- }