C/C++数据结构知识教程:栈和队列!大学数据结构课程又一难题,90分钟详细讲解




这里两种方法不懂的话可以看看我的另一个笔记:C语言入门教程 第12讲 结构体
代码见附录
-----待续。。。。。。
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node*next;
};
struct stack {
struct Node*stackTop; //栈顶标i记
int size; //栈中元素个数
};
//创建结点
struct Node *createNode(int data) {
struct Node*newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
};
//创建栈,就是创建一个struct stack的变量
struct stack*createstack() {
//创建过程就是初始化过程
struct stack*myStack = (struct stack*)malloc(sizeof(struct stack));
myStack->stackTop = NULL;
myStack->size = 0;
return myStack;
}
//写 数的方式-->自己写代码的思维
void push(struct stack *myStack, int data) {
//插入的这个结点创建出来
struct Node *newNode = createNode(data);
//入栈操作就是链表表头插入
newNode->next = myStack->stackTop;
myStack->stackTop = newNode;
myStack->size++;
}
//获取栈顶元素
int top(struct stack*myStack) {
//防御编程
if (myStack->size == 0) {
printf("栈为NULL,无法获取栈顶元素!\n");
system("pause");
return myStack->size;
}
return myStack->stackTop->data;
}
//出栈
void pop(struct stack*myStack) {
if (myStack-> size == 0) {
printf("栈为NULL,无法出栈!\n");
system("pause");
} else {
struct Node*nextNode = myStack->stackTop->next;
free(myStack->stackTop);
myStack->stackTop = nextNode;
myStack->size--;
}
}
//万金油函数
int empty(struct stack*myStack)
{
if (myStack->size ==0)
return 0;
return 1;
}
int main()
{
struct stack*myStack=createstack();
push(myStack,1);
push(myStack,2);
push(myStack,3);
while (empty(myStack))
{ printf("%d\t",top(myStack));
pop(myStack);
}
printf("\n");
system("pause");
return 0;
}