C语言:链表的反向输出(反转链表+栈结构)
来源:互联网 发布:linux怎么退出编辑模式 编辑:程序博客网 时间:2024/04/30 01:08
/*链表的反向输出1.反转链表2.链表节点从头到尾入栈,在出栈*/# 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_reverse(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);//反向遍历链表,反转链表printf("反转链表:");reverseTrans_reverse(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_reverse(PNODE pHead){//反向链表的头结点PNODE pRever = (PNODE)malloc(sizeof(NODE));pRever->pNext = NULL;PNODE p = pHead->pNext;PNODE mid = NULL; //两个临时变量PNODE pTail;while(p != NULL){pTail = mid;mid = p;p = p->pNext;mid->pNext = pTail;}pRever->pNext = mid;traverse(pRever);}//根据栈,反向输出链表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
- C语言:链表的反向输出(反转链表+栈结构)
- C语言 链表反向打印与反转
- c语言--通过栈反转链表
- (C语言)链表的反转(一次遍历)
- 链表的创建、删除、反向(C语言)
- 链表结构的反转
- 输出反转链表
- 链表反向输出
- 反转链表-C语言实现
- 链表的建立、输出、非递归反转、递归反转
- C语言:反向输出
- 一个链表创建、反转、打印的C语言代码
- C语言实现双向链表的反转
- C语言实现单向链表的反转
- C语言实现字符的反转输出
- 反转链表后输出、合并两个排序链表、树的子结构 -- 漫漫算法路 刷题篇
- 反向输出一个链表
- C语言实现的链表结构
- HA规范的理解2 -关键术词的理解和在协议栈初始化里的实现
- synergy
- 企业大数据战略的6大应用
- [LeetCode 206] Reverse Linked List
- poj2513
- C语言:链表的反向输出(反转链表+栈结构)
- 早已无谓的泪滴
- linux 复制虚拟机时重启网卡出现错误:device eth0 does not seem to be present,delaying initialization
- 24张神GIF动图:数学概念这么酷!
- 剖析prim最小生成树算法
- C# 创建Excel并写入内容
- 2D与2.5D坐标转换公式推导
- 如何进行网络数据挖掘
- 国家自然科学基金重点项目启动暨软件定义网络 技术前瞻研讨会