利用栈反向打印单链表
来源:互联网 发布:教学质量分析软件 编辑:程序博客网 时间:2024/06/05 02:10
# include <stdio.h>
# include <malloc.h>
# define SIZE 5 //初始定义链表的长度
//定义节点
typedef struct Node
{
int data;
struct Node * pNext;
}NODE, * PNODE;
//定义栈
typedef struct Stack
{
int * base; //栈空间基址
int * top; //指向栈顶有效元素的下一个位置
}Stack;
void traverse(PNODE pHead); //遍历链表
void reverseTrans_stack(PNODE pHead); //用栈反向输出链表
Stack creat_stack(); //创建栈
void push(Stack &s, int val); //元素入栈
int main(void)
{
int i, len, val;
//创建链表
PNODE pHead = (PNODE)malloc(sizeof(NODE)); //头结点
PNODE pTail = pHead; //尾节点
PNODE pNew; //新节点
printf("创建链表的长度为:len = %d\n", SIZE);
len = SIZE;
for(i = 0; i < len; i++)
{
printf("输入第%d个元素:", i+1);
scanf("%d", &val);
//创建新节点
pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = val;
pNew->pNext = NULL;
//新节点添加在尾节点后面
pTail->pNext = pNew;
pTail = pNew;
}
//遍历链表
traverse(pHead);
//反向遍历链表, 从头到尾节点入栈,然后再出栈
printf("用栈,反向输出链表:");
reverseTrans_stack(pHead);
return 0;
}
void traverse(PNODE pHead)
{
printf("遍历链表:");
PNODE p = pHead->pNext;
while(p != NULL)
{
printf("%d ", p->data);
p = p->pNext;
}
printf("\n");
}
//根据栈,反向输出链表
void reverseTrans_stack(PNODE pHead)
{
int val;
Stack s = creat_stack(); //创建栈
PNODE p = pHead->pNext;
while(p != NULL)
{
push(s, p->data); //节点从头到尾如入栈
p = p->pNext;
}
while(s.top != s.base) //元素再出栈
{
s.top --;
val = *(s.top);
printf("%d ", val);
}
printf("\n");
}
//创建栈
Stack creat_stack()
{
Stack s;
s.base = (int *)malloc(sizeof(int) * SIZE); //分配栈空间
s.top = s.base;
return s;
}
//元素入栈
void push(Stack &s, int val)
{
if((s.top - s.base) > SIZE)
{
printf("栈满!");
return;
}
else
{
*(s.top) = val;
s.top ++;
}
}
# include <malloc.h>
# define SIZE 5 //初始定义链表的长度
//定义节点
typedef struct Node
{
int data;
struct Node * pNext;
}NODE, * PNODE;
//定义栈
typedef struct Stack
{
int * base; //栈空间基址
int * top; //指向栈顶有效元素的下一个位置
}Stack;
void traverse(PNODE pHead); //遍历链表
void reverseTrans_stack(PNODE pHead); //用栈反向输出链表
Stack creat_stack(); //创建栈
void push(Stack &s, int val); //元素入栈
int main(void)
{
int i, len, val;
//创建链表
PNODE pHead = (PNODE)malloc(sizeof(NODE)); //头结点
PNODE pTail = pHead; //尾节点
PNODE pNew; //新节点
printf("创建链表的长度为:len = %d\n", SIZE);
len = SIZE;
for(i = 0; i < len; i++)
{
printf("输入第%d个元素:", i+1);
scanf("%d", &val);
//创建新节点
pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = val;
pNew->pNext = NULL;
//新节点添加在尾节点后面
pTail->pNext = pNew;
pTail = pNew;
}
//遍历链表
traverse(pHead);
//反向遍历链表, 从头到尾节点入栈,然后再出栈
printf("用栈,反向输出链表:");
reverseTrans_stack(pHead);
return 0;
}
void traverse(PNODE pHead)
{
printf("遍历链表:");
PNODE p = pHead->pNext;
while(p != NULL)
{
printf("%d ", p->data);
p = p->pNext;
}
printf("\n");
}
//根据栈,反向输出链表
void reverseTrans_stack(PNODE pHead)
{
int val;
Stack s = creat_stack(); //创建栈
PNODE p = pHead->pNext;
while(p != NULL)
{
push(s, p->data); //节点从头到尾如入栈
p = p->pNext;
}
while(s.top != s.base) //元素再出栈
{
s.top --;
val = *(s.top);
printf("%d ", val);
}
printf("\n");
}
//创建栈
Stack creat_stack()
{
Stack s;
s.base = (int *)malloc(sizeof(int) * SIZE); //分配栈空间
s.top = s.base;
return s;
}
//元素入栈
void push(Stack &s, int val)
{
if((s.top - s.base) > SIZE)
{
printf("栈满!");
return;
}
else
{
*(s.top) = val;
s.top ++;
}
}
阅读全文
0 0
- 利用栈反向打印单链表
- 链表反向打印
- 关于单链表的尾插,删除,反向打印单链表
- 如何利用反向电话簿
- 如何利用反向电话簿
- 回溯反向打印一个数组
- 利用backtrace函数打印函数调用栈
- 利用nginx 反向代理 google
- 利用SSH反向代理树莓派
- 利用打印控件实现打印
- C语言初级例题反向打印字符串
- 利用CSS控制打印
- 利用CSS控制打印
- 利用CSS控制打印
- 利用CSS控制打印
- 利用CSS进行打印
- 利用CSS控制打印
- 利用CSS控制打印
- HyperLedger/fabric1.0.0正式版部署
- 我的服务器开发之路-windows计划任务的使用
- Vue自定义指令的使用
- Setup docker on OSX
- 软键盘弹出布局上移
- 利用栈反向打印单链表
- HUST 1010 The Minimum Length(KMP)
- mongodb远程连不上的解决方法
- 前端基本功—js第二天
- Redis常用命令
- Linux系统下安装jdk详细步骤(共两种方法)
- ubuntu 解決搜狗无法输入中文的问题
- ubuntu 16.04下安装使用OpenCV2.4.13
- CSS选择器中 后代选择器和派生选择器有什么区别?