堆栈(Strack)是指这样一段内存,它可以理解为一个筒结构,先放进筒中的数据被后放进筒中的数据“压住”,只有后放进筒中的数据都取出后,先放进去的数据才能被取出,称为“后进先出”。堆栈的长度可随意增加。堆栈结构可用链表实现。设计一个链表结构需包含两个成员:一个存放数据,一个为指向下一个节点的指针。当每次有一个新数据要放入堆栈时,称为“压入堆栈”,这时动态建立一个链表的节点,并连接到链表的结尾;当每次从堆栈中取出一个数据时,称为“弹出堆栈”,这意味着从链表的最后一个节点中取出该节点的数据成员,同时删除该节点,释放该节点所占的内存。 编程用链表方法实现堆栈数据结构。程序至少应该包含三个函数: 1、主函数 2、压栈操作:将5个数据依次压入堆栈 3、出栈操作:将5个数据依次弹出堆栈(注意:因为后进先出的原因,弹出时是逆序,另外,弹出后要删除该节点内存); **输入提示:printf("请输入要压栈的整数:"); **输入格式:"%d" **压栈后输出格示:"Push %dth Data:%d\n" **出栈后输出格式:"Pop %dth Data:%d\n" 程序运行示例: 请输入要压栈的整数:1 Push 1th Data:1 请输入要压栈的整数:2 Push 2th Data:2 请输入要压栈的整数:3 Push 3th Data:3 请输入要压栈的整数:4 Push 4th Data:4 请输入要压栈的整数:5 Push 5th Data:5 Pop 5th Data:5 Pop 4th Data:4 Pop 3th Data:3 Pop 2th Data:2 Pop 1th Data:1
时间: 2023-07-15 15:13:01 浏览: 48
```c
#include<stdio.h>
#include<stdlib.h>
struct Node{
int data;
struct Node *next;
};
void push(struct Node **top, int data){
struct Node *newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = *top;
*top = newNode;
printf("Push %dth Data:%d\n", data, data);
}
void pop(struct Node **top, int data){
struct Node *temp = *top;
int count = 0;
while(temp != NULL){
count++;
temp = temp->next;
}
temp = *top;
for(int i=0; i<count-data; i++){
temp = temp->next;
}
printf("Pop %dth Data:%d\n", data, temp->data);
struct Node *deleteNode = temp;
temp = temp->next;
free(deleteNode);
}
int main(){
struct Node *top = NULL;
int data;
for(int i=1; i<=5; i++){
printf("请输入要压栈的整数:");
scanf("%d", &data);
push(&top, data);
}
for(int i=1; i<=5; i++){
pop(&top, i);
}
return 0;
}
```