链式队列

具体代码:

//队列就是用Front和TailC操作节点形成队列(与栈相比就是变成了尾插入,获取都是从头获取元素)
#include<stdio.h>
#include<stdlib.h>

//节点定义
struct Node
{
int data;
struct Node* next;
};
//节点创建
struct Node* createNode(int data)
{
struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
newNode->data=data;
newNode->next=NULL;
return newNode;
}
//队列定义
struct Queue
{
struct Node* frontNode;
struct Node* tailNode;
int size;
};
//队列创建(需要建立一个队列的变量,再返回一个指针,用这个指针操作)
struct Queue* createQueue()
{
struct Queue* myQueue=(struct Queue*)malloc(sizeof(struct Queue));
myQueue->frontNode=myQueue->tailNode=NULL;
myQueue->size=0;
return myQueue;
}
//插入元素
void push(struct Queue* myQueue,int data)
{
struct Node* newNode=createNode(data);
if(myQueue->size==0)
    {
    myQueue->frontNode=myQueue->tailNode=newNode;
    }
else
    {
    myQueue->tailNode->next=newNode;
    myQueue->tailNode=newNode;
    }
myQueue->size++;
}
//删除元素
void pop(struct Queue* myQueue)
{
if(myQueue->size==0)
{
printf("The Queue is empty!\n");
}
else
{
struct Node* deNode=myQueue->frontNode;
myQueue->frontNode=myQueue->frontNode->next;
free(deNode);
}
myQueue->size--;
}
//获取队列头元素
int front(struct Queue* myQueue)
{
if(myQueue->size==0)
{
printf("The Queue is empty!\n");
}
else
{
return myQueue->frontNode->data;
}
}
//判断队列是否为空
int isEmpty(struct Queue* myQueue)
{
if(myQueue->size==0)
{
return 0;
}
else
{
return 1;
}
}

int main()
{
    struct Queue* myQueue=createQueue();
    push(myQueue,1);
    push(myQueue,2);
    push(myQueue,3);
    while(isEmpty(myQueue))
    {
    printf("%d ",front(myQueue));
    pop(myQueue);
    }
printf("\n");
return 0;
}

 

效果展示:

 自己练习的:

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
char data;
struct Node* next;
}NODE,*LPNODE;
typedef struct stack
{
int size;
LPNODE stackTop;
}STACK,*LPSTACK;
LPNODE createNode(char data)
{
LPNODE newNode=(LPNODE)malloc(sizeof(NODE));
newNode->data=data;
newNode->next=NULL;
return newNode;
}
LPSTACK createStack()
{
    LPSTACK st=(LPSTACK)malloc(sizeof(STACK));
    st->size=0;
    st->stackTop=NULL;
    
    return st;
}

void insertNode(LPSTACK st,char data)
{
LPNODE newNode=createNode(data);
if(st->size==0)
{
st->stackTop=newNode;
st->size++;

}
else
{
newNode->next=st->stackTop;//最重要的一步,这里并不是newNode->next=st->stackTop->next;而是直接连接上stackTop指向的,再移动指针
st->stackTop=newNode;
st->size++;
}

}


void printStack(LPSTACK st)
{
    LPNODE pmove=st->stackTop;
while(pmove!=NULL)
{
printf("%c ",pmove->data);
pmove=pmove->next;
}
}
int main()
{
    LPSTACK st=createStack();
    insertNode(st,'A');
    insertNode(st,'B');
    insertNode(st,'C');
    printStack(st);
return 0;
}

 自己练习的(结果为 A B C)

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
char data;
struct Node* next;
}NODE,*LPNODE;
typedef struct Queue
{
int size;
LPNODE frontNode;
LPNODE rearNode;
}QUEUE,*LPQUEUE;
LPNODE createNode(char data)
{
LPNODE newNode=(LPNODE)malloc(sizeof(NODE));
newNode->data=data;
newNode->next=NULL;
return newNode;
}
LPQUEUE createQueue()
{
LPQUEUE qu=(LPQUEUE)malloc(sizeof(QUEUE));
qu->frontNode=NULL;
qu->rearNode=NULL;
qu->size=0;
return qu;
}
void insertNode(LPQUEUE qu,char data)
{
    LPNODE newNode=createNode(data);
if(qu->size==0)
    {
    qu->frontNode=qu->rearNode=newNode;
    qu->size++;
    }
else
    {
    qu->rearNode->next=newNode;
    qu->rearNode=newNode;
    qu->size++;
    }
}

void printQueue(LPQUEUE qu)
{
LPNODE pmove=qu->frontNode;
while(pmove!=NULL)
    {
    printf("%c ",pmove->data);
    pmove=pmove->next;
    }
}

int main()
{
    LPQUEUE qu=createQueue();
    insertNode(qu,'A');
    insertNode(qu,'B');
    insertNode(qu,'C');
    printQueue(qu);
return 0;
}

 

posted @ 2020-03-08 12:21  记得喝牛奶  阅读(152)  评论(0编辑  收藏  举报