用链表摸拟栈

阅读: 评论:0

用链表摸拟栈

用链表摸拟栈

链式栈,用链表摸拟栈。

stack.h

#include<stdio.h>
#include<stdlib.h>struct LinkStack
{int id;		//编号int data;	//数值struct LinkStack *pNext;
};struct LinkStack *phead;	//全局变量
typedef struct LinkStack node, *PNODE;PNODE push(PNODE phead, int id, int data);	//进栈
PNODE pup(PNODE phead);		//出栈
void showAll(PNODE phead);	//显示所有栈的信息
PNODE clearStack(PNODE phead);	//清空栈信息

stack.c

#include"stack.h"PNODE push(PNODE phead, int id, int data)	//进栈
{PNODE pnew = malloc(sizeof(node));pnew->data = data;pnew->id = id;pnew->pNext = NULL;if (phead == NULL){phead = pnew;		}else{PNODE ptemp = phead;while (ptemp->pNext != NULL){ptemp = ptemp->pNext;}ptemp->pNext = pnew;}return phead;
}PNODE pup(PNODE phead)		//出栈
{//出栈是从尾部出栈if (phead == NULL){return phead;}else if (phead->pNext == NULL)	//只有一个节点时出栈{printf("%d %dn", phead->id, phead->data);phead = NULL;  }else{PNODE p1 = phead;while (p1->pNext->pNext != NULL){p1 = p1->pNext;	//循环到倒数第二个,这时 p1->pNext->pNext就指向最后一个}printf("%d %dn", p1->pNext->id, p1->pNext->data);//这时可以删除最后一个 即:p1->pNext->pNextfree(p1->pNext->pNext);p1->pNext = NULL;}return phead;
}void showAll(PNODE phead)	//显示所进栈顺序
{if (phead == NULL){return;}else{while (phead != NULL){printf("%d %dn", phead->id, phead->data);phead = phead->pNext;}}
}PNODE clearStack(PNODE phead)	//清空栈信息
{PNODE p1 = NULL;PNODE p2 = NULL;p1 = phead;if (phead == NULL){return phead;}else{while (p1->pNext != NULL){p2 = p1->pNext;	//使用 p2 保存 p1 的值,这样就可以删除 p2p1->pNext = p2->pNext;	//让p1->pNext 指向 p2 的下个节点,这样可以把链表连起来free(p2);}//最后删除头节点free(phead);phead = NULL;return phead;}
}

main.c

#include"stack.h"void to(int num)
{printf("num: %dn ", num);if (num == 0 ){return;}else{// 1: num /2 与 num /= 2 有什么区别?//to(m /= 2);//这儿是把 m/=2 的值当做参数传递给形参,而且改变了m的值在程序中。to(num / 2); //这儿是把 m/2 的值当做参数传递给形参。//如果是先把印,后调用这两种写法都没问题,而如果是先调用,后打印这样打印中使用的 m 值就不同了 //一个是 m ,一个是 m = m/2 (m 除以 2 )后的值,所以先调用后打印有区别。printf("%3d", num % 2);	}
}void main()
{int i = 0;for (i = 0; i < 10; i++){phead = push(phead, i, 100 + i);}showAll(phead);//printf("nn");//while (phead != NULL)//{//	phead = pup(phead);//}phead = clearStack(phead);printf("nn");while (phead != NULL){phead = pup(phead);}system("pause");
}void main1()
{to(10);system("pause");
}


本文发布于:2024-02-01 19:47:18,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170678803939029.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:链表   摸拟栈
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23