利用顺序表实现栈 利用单链表实现队列

利用顺序表实现栈

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<stack>


#define stack_max_num 10


struct SeqStack{
int MAXNUM;
int t;//始终指向栈顶
int *s;
};
typedef struct SeqStack *PSeqStack;






/*
创建一个空的堆栈,存储方式为顺序表
*/
PSeqStack createEmptyStack_seq(int m){


PSeqStack pastack = (PSeqStack)malloc(sizeof (struct SeqStack));
if (pastack == NULL){
printf("out of spcae!\n");
return NULL;
}
pastack->s = (int *)malloc(sizeof (int)*m);
if (pastack == NULL){
printf("out of space!\n");
return NULL;
}
pastack->MAXNUM = m;
pastack->t = -1;
return pastack;
}
/*****************************************************/


/*
判断堆栈是否为空
*/
int isEmptyStack_seq(PSeqStack pastack){


if (pastack->t == (-1))
return 1;
return 0;


}
/*****************************************************/




/*
将x压入栈中,成功返回1,否则返回0;
*/
int push_seq(PSeqStack pastack, int x){


if (pastack->t >= pastack->MAXNUM){
printf("overflow!\n");
return 0;
}
pastack->t = pastack->t + 1;
pastack->s[pastack->t] = x;
return 1;


}
/*****************************************************/




/*
将栈顶元素出栈,成功返回1,否则返回0;
*/
int pop_seq(PSeqStack pastack){


if (pastack->t == (-1)){
printf("empty stack!\n");
return 0;
}
pastack->t = (pastack->t) - 1;
return 1;


}
/*****************************************************/




/*
获取栈顶元素,成功返回栈顶元素,否则返回-1;
*/
int top_seq(PSeqStack pastack){


if (pastack->t == (-1)){
printf("empty stack!\n");
return -1;
}


return pastack->s[pastack->t];


}
/*****************************************************/


/********************主函数***************************/
int main(){
PSeqStack stack_get = createEmptyStack_seq(stack_max_num);
push_seq(stack_get, 0);
push_seq(stack_get, 1);
push_seq(stack_get, 2);
push_seq(stack_get, 3);
pop_seq(stack_get);
int from_top = top_seq(stack_get);
printf("%d\n", from_top);
return 0;

}


利用单链表实现队列 

#define _CRT_SECURE_NO_WARNINGS 1


#include <stdio.h>
#include <stdlib.h>


typedef struct _nodequeue_ {
int data;
struct _nodequeue_ *next;
} nodequeue_st;


typedef struct _linkqueue_ {
int total;
int current;
nodequeue_st *head;
nodequeue_st *tail;
} linkqueue_st;


linkqueue_st *linkqueue_init(int size);
nodequeue_st *linkqueue_node_create(int value);
int linkqueue_enqueue(linkqueue_st *queue, int value);
int linkqueue_isfull(linkqueue_st *queue);
int linkqueue_dequeue(linkqueue_st *queue, int *value);
int linkqueue_isempty(linkqueue_st *queue);
int linkqueue_free(linkqueue_st *queue);


int main(void)
{
linkqueue_st *queue = NULL;
int value = 100;
int size = 10;


queue = linkqueue_init(size);
while (-1 != linkqueue_enqueue(queue, value))
value++;
while (-1 != linkqueue_dequeue(queue, &value))
printf("%5d", value);


putchar('\n');
linkqueue_free(queue);


return 0;
}


linkqueue_st *linkqueue_init(int size)
{
linkqueue_st *queue;


queue = (linkqueue_st *)malloc(sizeof(linkqueue_st));
queue->total = size;
queue->current = 0;
queue->head = linkqueue_node_create(0);
queue->tail = queue->head;


return queue;
}


nodequeue_st *linkqueue_node_create(int value)
{
nodequeue_st *node = NULL;


node = (nodequeue_st *)malloc(sizeof(nodequeue_st));
node->data = value;
node->next = NULL;


return node;
}


int linkqueue_enqueue(linkqueue_st *queue, int value)
{
nodequeue_st *node = NULL;


if (linkqueue_isfull(queue))
return -1;
node = linkqueue_node_create(value);
node->next = queue->tail->next;
queue->tail->next = node;
queue->tail = node;
queue->current++;


return 0;
}


int linkqueue_dequeue(linkqueue_st *queue, int *value)
{
nodequeue_st *tmp = NULL;


if (linkqueue_isempty(queue))
return -1;
tmp = queue->head;
*value = tmp->next->data;
queue->head = queue->head->next;
free(tmp);
queue->current--;


return 0;
}


int linkqueue_isfull(linkqueue_st *queue)
{
if (queue->current == queue->total)
return 1;
return 0;
}


int linkqueue_isempty(linkqueue_st *queue)
{
if (queue->current == 0)
return 1;
return 0;
}


int linkqueue_free(linkqueue_st *queue)
{
nodequeue_st *node = queue->head;
nodequeue_st *tmp = NULL;


while (node != NULL) {
tmp = node;
node = node->next;
free(tmp);
}
free(queue);


return 0;
}


猜你喜欢

转载自blog.csdn.net/lxb18821659801/article/details/80895933