老区建设网站,亚马逊市场营销案例分析,申请建设单位门户网站的请示,医院关于申请网站建设的请示堆栈与队列是两种重要的基础数据结构#xff0c;一个是先入后出#xff0c;一个是先入先出#xff0c;有着广泛的应用#xff0c;本文分别使用数组与链表实现堆栈与队列
顺序存储方式实现堆栈
#define MaxSize 20
#define ERROR -1
typedef struct {int Data[MaxSize];in…堆栈与队列是两种重要的基础数据结构一个是先入后出一个是先入先出有着广泛的应用本文分别使用数组与链表实现堆栈与队列
顺序存储方式实现堆栈
#define MaxSize 20
#define ERROR -1
typedef struct {int Data[MaxSize];int Top;
} Stack;Stack *CreateStack( int maxSize)// 生成空堆栈其最大长度为MaxSize
{Stack *s(Stack*)malloc(sizeof(Stack)*maxSize);s-Top-1;return s;
}
int IsFull( Stack *S, int maxSize)//判断堆栈S是否已满
{if (S-TopmaxSize-1){return 1;}else{return 0;}
}
void Push( Stack *S, int item )//将元素item压入堆栈
{if (S-TopMaxSize-1){printf(the stack is full);return;}else{S-Data[(S-Top)]item;return;}}
int IsEmpty ( Stack *S )//判断堆栈S是否为空
{if (S-Top-1){return 1;}else{return 0;}
}
int Pop( Stack *S )//删除并返回栈顶元素
{if (S-Top-1){printf(the stack is empty);return ERROR;}else{return S-Data[(S-Top)--];}
}void show(Stack *s)
{int i;for(i0;is-Top;i){printf(%d ,s-Data[i]);}
}void main()
{int a,b;Stack *sCreateStack(MaxSize);while (1){printf(please enter your order:);scanf(%d,a);switch (a){case 1:scanf(%d,b);Push(s,b);break;case 2:Pop(s);break;case 3:show(s);break;case 4:exit(0);break;default:break;}}} 链式堆栈
typedef struct Node{int Data;struct Node *Next;
} LinkStack;LinkStack *CreateStack()
{LinkStack *s(LinkStack*)malloc(sizeof(LinkStack));s-NextNULL;return s;
}int IsEmpty(LinkStack *s)
{return (s-NextNULL);
}void Push( int item, LinkStack *S )
{LinkStack *TmpCell;TmpCell(LinkStack*)malloc(sizeof(LinkStack));TmpCell-Dataitem;TmpCell-NextS-Next;S-NextTmpCell;}int pop(LinkStack *s)
{LinkStack *firstItem;int topNum;if (IsEmpty(s)){printf(stack is empty);return NULL;}firstItems-Next;s-NextfirstItem-Next;topNumfirstItem-Data;free(firstItem);return topNum;}
void show(LinkStack *s)
{ss-Next;while (s){printf(%d ,s-Data);ss-Next;}
}void main()
{int a,b;LinkStack *sCreateStack();while (1){printf(please enter your order:);scanf(%d,a);switch (a){case 1:scanf(%d,b);Push(b,s);break;case 2:pop(s);break;case 3:show(s);break;case 4:exit(0);break;default:break;}}
} 顺序存储队列
#define MaxSize 20
#define ERROR -1
typedef struct {int Data[ MaxSize ];int rear;int front;
} Queue;void AddQ( Queue *PtrQ, int item)
{if ((PtrQ-rear1)%MaxSizePtrQ-front){printf(the queue is full);}else{PtrQ-rear(PtrQ-rear1)%MaxSize;PtrQ-Data[PtrQ-rear]item;}
}int DeleteQ ( Queue *PtrQ )
{if (PtrQ-frontPtrQ-rear){printf(the queue is empty);}else{PtrQ-front(PtrQ-front1)%MaxSize;return PtrQ-Data[PtrQ-front-1];}
}
void show(Queue *PtrQ)
{int i;for(iPtrQ-front1;iPtrQ-rear;i){printf(%d ,PtrQ-Data[i%MaxSize]);}
}void main()
{int a,b;Queue *q(Queue*)malloc(sizeof(Queue));q-front-1;q-rear-1;while (1){printf(please enter your order:);scanf(%d,a);switch (a){case 1:scanf(%d,b);AddQ(q,b);break;case 2:DeleteQ(q);break;case 3:show(q);break;case 4:exit(0);break;default:break;}}
} 链式队列
#define ERROR -1
typedef struct Node{int Data;struct Node *Next;
}QNode;
typedef struct { /* 链队列结构 */QNode *rear; /* 指向队尾结点 */QNode *front; /* 指向队头结点 */
} LinkQueue;LinkQueue* AddQuee(LinkQueue *PtrL,int item)
{QNode *node;nodePtrL-rear;if (PtrL-frontNULL){QNode *q(QNode*)malloc(sizeof(QNode));q-NextNULL;q-Dataitem;PtrL-frontq;PtrL-rearq;return PtrL;}else{QNode *q(QNode*)malloc(sizeof(QNode));q-NextNULL;q-Dataitem;node-Nextq;PtrL-rearq;return PtrL;}
}int DeleteQ ( LinkQueue *PtrQ )
{QNode *firstNode;int NodeItem;if (PtrQ-frontNULL){printf(queue is empty);return ERROR;}firstNodePtrQ-front;if (PtrQ-frontPtrQ-rear){PtrQ-frontPtrQ-rearNULL;}else{PtrQ-frontPtrQ-front-Next;}NodeItemfirstNode-Data;free(firstNode);return NodeItem;
}void show(LinkQueue *q)
{QNode *node;nodeq-front;while (node){printf(%d ,node-Data);nodenode-Next;}
}void main()
{int a,b;LinkQueue *q(LinkQueue*)malloc(sizeof(LinkQueue));q-frontNULL;q-rearNULL;while (1){printf(please enter your order:);scanf(%d,a);switch (a){case 1:scanf(%d,b);qAddQuee(q,b);break;case 2:DeleteQ(q);break;case 3:show(q);break;case 4:exit(0);break;default:break;}}
}