单向链表的倒序输出(栈实现和递归实现)
2015-09-27 22:38
519 查看
**栈实现** #include<stdio.h> #include<malloc.h> typedef struct node{ int val; struct node * next; }NODE,*PNODE; typedef struct stack{ PNODE head; PNODE bottom; }STACK,*PSTACK; void init(PSTACK s){ s->head=(PNODE)malloc(sizeof(NODE)); if(s->head==NULL) return; s->bottom=s->head; return; } void push(PSTACK s,int val){ if(s==NULL) return; PNODE newNode=(PNODE)malloc(sizeof(NODE)); newNode->val=val; newNode->next=s->head; s->head=newNode; return; } void main(void){ NODE n; n.val=0; n.next=NULL; PNODE phead=&n; PNODE phead1=phead; int i; for(i=1;i<10;i++){ PNODE temp=(PNODE)malloc(sizeof(NODE)); temp->val=i; phead1->next=temp; temp->next=NULL; phead1=temp; } STACK s; init(&s); PNODE tempNode=phead; while(tempNode->next!=NULL){ printf("%d ",tempNode->val); push(&s,tempNode->val); tempNode=tempNode->next; } printf("%d\n",tempNode->val); push(&s,tempNode->val); PNODE pTemp=s.head; while(pTemp!=s.bottom){ printf("%d ",pTemp->val); pTemp=pTemp->next; } } **递归实现** #include<stdio.h> #include<malloc.h> typedef struct node{ int val; struct node * next; }NODE,*PNODE; void show(PNODE n){ if(n==NULL) return; if(n->next!=NULL){ show(n->next); } printf("%d",n->val); } void main(void){ NODE n; n.val=-1; n.next=NULL; PNODE phead=&n; int i; for(i=0;i<10;i++){ PNODE temp=(PNODE)malloc(sizeof(NODE)); temp->val=i; temp->next=NULL; phead->next=temp; phead=temp; } show(&n); }
相关文章推荐
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- C#中struct和class的区别详解
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C#中的尾递归与Continuation详解
- C++基于栈实现铁轨问题
- C语言栈的表示与实现实例详解
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C语言实现颠倒栈的方法
- C++ 关于STL中sort()对struct排序的方法
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- C++实现简单的学生管理系统
- 算法系列15天速成 第十天 栈
- php递归创建目录的方法
- C# Struct的内存布局问题解答
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- Array栈方法和队列方法的特点说明
- Javascript递归打印Document层次关系实例分析
- Linux内核链表实现过程