1.栈
https://blog.csdn.net/CSDN___CSDN/article/details/82918436
1 #include <stdio.h>2 #include <stdlib.h>3 4 typedef struct link_node5 {6 int info;7 struct link_node *next;8 }N;9 10 /*创建一个空的链式栈*/11 N *init()12 {13 return NULL;14 }15 16 /*对链式栈进行初始化*/17 N *creat(N *top)18 {19 int x;20 N *p;21 printf("以输入-1为结束\n");22 scanf("%d",&x);23 while(x!=-1)24 {25 p=(N*)malloc(sizeof(N));26 p->info=x;27 p->next=top;28 top=p;29 scanf("%d",&x);30 }31 return top;32 }33 34 /*取得链式栈的栈顶结点值*/35 int read(N *top)36 {37 if(!top)38 {39 printf("\n该链式栈是空的\n");40 }41 return top->info;42 } 43 44 /*输出链式栈中各结点的值*/45 void display(N *top)46 {47 N *p=top;48 if(!top)49 {50 printf("该链式栈是空的\n");51 }52 else53 {54 while(p)55 {56 printf("%d ",p->info);57 p=p->next;58 }59 printf("\n");60 }61 }62 63 /*链式栈的插入操作*/64 N *insert(N *top,int x)65 {66 N *q=top,*p;67 p=(N*)malloc(sizeof(N));68 p->info=x;69 p->next=top;70 top=p;71 return top;72 }73 74 /*链式栈的删除操作*/75 N *dele(N *top)76 {77 N *p=top;78 if(!top)79 {80 printf("\n该链式栈是空的,无法进行删除\n");return NULL; 81 }82 top=top->next;83 free(p);84 return top; 85 } 86 87 int main()88 {89 N* top = init();90 top = creat(top);91 display(top);92 int i = read(top);93 printf("%d\n",i);94 top = insert(top,5);95 display(top);96 top = dele(top);97 display(top);98 99 return 0;
100 }
2.栈c++实现
https://blog.csdn.net/zichen_ziqi/article/details/80807989
1 #include <iostream>2 using namespace std;3 4 template <class T>5 class stack{6 private:7 struct Node{8 T data;9 struct Node *next;
10 };
11 Node *head;
12 int len;
13 public:
14 stack()
15 {
16 head = NULL;
17 len = 0;
18 }
19 //创建一个栈
20 void create()
21 {
22 int x;
23 Node *p;
24 cout << "以输入-1为结束" << endl;
25 cin >> x ;
26 while(x!=-1)
27 {
28 p=new Node;
29 p->data=x;
30 p->next=head;
31 head=p;
32 cin >> x ;
33 len++;
34 }
35 }
36 //入栈
37 void push(T x)
38 {
39 Node *q = new Node;
40 q->data = x;
41 q->next = head;
42 len++;
43 }
44 //出栈
45 T top()
46 {
47 Node *p;
48 T data;
49 data = head->data;
50 p = head;
51 head = head->next;
52 delete(p);
53 len--;
54 return data;
55 }
56 //返回栈内元素的个数
57 int size()
58 {
59 return len;
60 }
61 };
62
63 int main()
64 {
65 stack<int> s;
66 s.create();
67 s.push(7);
68 cout << s.size() << endl;
69 cout << s.top() << endl;
70 cout << s.size() << endl;
71
72 return 0;
73 }
3.用两个栈实现队列的功能
https://blog.csdn.net/weixin_40671425/article/details/83006485
1 #include<stdio.h>2 #include<stdlib.h>3 4 #define STACK_INIT_SIZE 105 6 typedef struct stack{7 int *base;8 int *top;9 int stacksize;
10 }stack;
11
12 int initStack(stack *s)//构造一个空栈
13 {
14 s->base = (int *)malloc(sizeof(stack)*STACK_INIT_SIZE);
15 if(s->base == NULL)
16 exit(-1);
17 s->top = s->base;
18 s->stacksize = STACK_INIT_SIZE;
19 return 1;
20 }
21
22 void push(stack *s,int num)//压栈
23 {
24 *s->top++ = num;//注意 优先级
25 }
26
27 int pop(stack *s)//弹栈
28 {
29 if(s->base == s->top)//空栈,无栈可弹
30 return -1;
31 return *(--s->top);
32 }
33
34 int main()
35 {
36 stack s1,s2;
37 initStack(&s1);
38 initStack(&s2);
39 int nums[] = {1,2,3,4,5,6};
40 printf("压入栈 1\n");
41 for(int i=0;i<6;i++)
42 {
43 push(&s1,*(nums + i));
44 }
45 printf("出队的顺序为:\n");
46 for(int i=0;i<6;i++)
47 {
48 push(&s2,pop(&s1));
49 }
50 for(int i=0;i<6;i++)
51 {
52 printf("%d \t",pop(&s2));
53 }
54 return 0;
55 }
4.栈的最小的值
https://blog.csdn.net/ltc0106/article/details/105779396
1 #include <stdio.h>2 #include <stdlib.h>3 4 #define STACK_TYPE int5 6 typedef struct STACK_NODE7 {8 STACK_TYPE value;9 struct STACK_NODE *next;10 struct STACK_NODE *next_min;11 }Stack_Node;12 13 //data栈14 static Stack_Node *stack;15 //只指向最小数的栈16 static Stack_Node *stack_min;17 18 void create_stack()19 {20 stack = NULL;21 stack_min = NULL;22 }23 24 void push(int value)25 {26 Stack_Node *new_node;27 new_node = (Stack_Node *)malloc(sizeof(Stack_Node));28 //更新data栈29 new_node->value = value;30 new_node->next = stack; //单向循环链表31 stack = new_node;32 //更新min栈33 if(stack_min == NULL ||value < stack_min->value )34 {35 new_node->next_min = stack_min;36 stack_min = new_node;37 }38 else39 {40 new_node->next_min = NULL;41 }42 }43 44 int pop()45 {46 STACK_TYPE value;47 Stack_Node *first_node;48 49 if(stack_min == stack)50 stack_min = stack->next_min;51 52 first_node = stack;53 stack = first_node->next;54 value = first_node->value;55 56 free(first_node);57 return value;58 }59 60 int top()61 {62 return stack->value;63 }64 65 66 int min()67 {68 return stack_min->value;69 }70 71 int main()72 {73 create_stack();74 push(5);75 printf("min:%d\n",min());76 push(4);77 printf("min:%d\n",min());78 push(3);79 printf("min:%d\n",min());80 push(5);81 printf("min:%d\n",min());82 push(1);83 printf("min:%d\n",min());84 push(90);85 86 printf("min:%d\n",min());87 printf("pop:%d\n",pop());88 printf("min:%d\n",min());89 printf("pop:%d\n",pop());90 printf("min:%d\n",min());91 printf("pop:%d\n",pop());92 printf("min:%d\n",min());93 printf("pop:%d\n",pop());94 printf("min:%d\n",min());95 printf("pop:%d\n",pop());96 printf("min:%d\n",min());97 printf("pop:%d\n",pop());98 99 return 0;
100 }