C语言之数据结构——栈
栈:
定义:限定只在表尾进行插入或删除操作的线性表,表尾指栈顶,表头指栈底。
特点:栈只能是先进后出。
类别:线性栈和链栈。
/*
数据结构栈:
1、特点:先进后出。
2、基本操作
InitStack(&S)
操作结果:初始化一个栈
Push(&S)
操作结果:进行压栈,输入元素
Pop(&S)
操作结果:删除栈的栈顶元素
定义一个栈:
typedef struct node{
int data;
struct node *next;
}Node,*pNode;
struct Stack{
pNode top;
pNode base;
}link;
*/
1 #include <stdio.h> 2 #include <malloc.h> 3 typedef struct node{ 4 int data; 5 struct node *next; 6 }Node,*pNode; 7 typedef struct Stack{ 8 pNode top; 9 pNode base; 10 }Link,*pLink; 11 InitStack(pLink S){ 12 S->top=(pNode)malloc(sizeof(Node)); 13 if(S->top){ 14 S->base=S->top;//初始化栈,将栈顶指向栈底 15 S->top->next=NULL; 16 } 17 else 18 { 19 printf("分配失败\n"); 20 return 0; 21 } 22 } 23 LinkPush(pLink L,int val){ 24 //建立的第二个栈L,在本程序里面,它用来储存栈S按顺序入栈的元素 25 pNode p=(pNode)malloc(sizeof(Node)); 26 p->data=val; 27 p->next=L->top; 28 L->top=p; 29 } 30 Push(pLink S){ 31 //栈S进行入栈, 32 pNode p; 33 int i,n=0; 34 printf("请你要输入的元素的个数:\n"); 35 scanf("%d",&n); 36 printf("请输入栈的元素:\n"); 37 for(i=0;i<n;i++){ 38 p=(pNode)malloc(sizeof(Node)); 39 //定义一个新的节点用来输入栈的元素; 40 scanf("%d",&p->data); 41 p->next=S->top; 42 S->top=p; 43 44 } 45 } 46 Pop(pLink S){ 47 pNode p=S->top; 48 printf("\n依次删除的栈顶元素:\n"); 49 //删除栈顶元素 50 while(p!=S->base){ 51 printf("%d ",p->data); 52 S->top=S->top->next; 53 //依次向前移位 54 p=S->top; 55 } 56 57 } 58 DataLink(pLink S,pLink L){ 59 pNode p=S->top; 60 while(p!=S->base){ 61 //栈L存储栈S入栈的元素,也可以说将栈S中的元素逆置并存入栈L里面 62 LinkPush(L,p->data); 63 p=p->next; 64 } 65 } 66 LinkTraverse(pLink L){ 67 pNode p=L->top; 68 printf("\n入栈的元素:\n"); 69 //将栈L中的元素遍历 70 while(p!=L->base){ 71 printf("%d ",p->data); 72 p=p->next; 73 } 74 } 75 traverse(pLink S){ 76 pNode p=S->top; 77 printf("\n出栈后的元素:\n"); 78 while(p!=S->base){ 79 printf("%d ",p->data); 80 p=p->next; 81 } 82 } 83 main(){ 84 Link S; 85 Link L; 86 InitStack(&S); 87 InitStack(&L); 88 Push(&S); 89 DataLink(&S,&L); 90 LinkTraverse(&L); 91 traverse(&S); 92 Pop(&S); 93 traverse(&S); 94 } 95 96 97 98
原文:http://www.cnblogs.com/KingHwt/p/5014129.html