鏈式佇列 (c語言)
阿新 • • 發佈:2018-11-28
結構體:
結點結構體
typedef struct TreeNODE
{
char date;
struct TreeNODE *next;
}Queue;
隊頭、尾結構體:
typedef struct
{
Queue *front;
Queue *rear;
}Piont;
初始化
//初始化
void chongqueue(Piont *p)
{
p->front=NULL;
p->rear=NULL;
}
使佇列頭尾指標指向都為NULL
入棧
oid inqueue(Piont *p,char x) { Queue *u; u=(Queue*)malloc(sizeof(Piont)); u->date=x; u->next=NULL; if(p->rear!=NULL) { p->rear->next=u; // p->rear=u; //將隊尾指標指向新插入的節點上 } if(p->front==NULL) { p->front=u; } }
構建一個結點,將一個元素入棧所以隊頭指標指向第一個元素,此時rear指向第一個不為空的結點,當第二個元素進站時,就可以將結點賦值給rear->next,然後將隊尾指標指向第二個結點。
下面是順序結構
出棧
int deleteQueue(Piont *p,char *ch) { Queue *q; if(p->front==NULL) { printf("佇列為空\n"); return 0; } else{ *ch =p->front->date; q =p->front; p->front=p->front->next; if(p->front==NULL) { p->rear=NULL; } free(q); return 1; } }
新建一個結點指標,讓此結點也指向棧頂元素,然後讓頭指標指向下一個結點,free掉新建的結點;而當刪除最後一個結點,要使隊尾指標為空。
獲取棧頂元素
char getQueue(Piont *p)
{
char ch;
if(p->front==NULL)
{
printf("佇列為空\n");
return 0;
}
else{
ch = p->front->date;
return ch;
}
}
main函式
int main() { Piont p; //二級指標指向指標,指標指向結構體變數或普通變數 char x; chongqueue(&p); inqueue(&p,'A'); inqueue(&p,'B'); inqueue(&p,'D'); x=getQueue(&p); printf("%c\n",x); return 0; }
完整程式碼
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNODE
{
char date;
struct TreeNODE *next;
}Queue;
typedef struct
{
Queue *front;
Queue *rear;
}Piont;
//初始化
void chongqueue(Piont *p)
{
p->front=NULL;
p->rear=NULL;
}
//入棧
void inqueue(Piont *p,char x)
{
Queue *u;
u=(Queue*)malloc(sizeof(Piont));
u->date=x;
u->next=NULL;
if(p->rear!=NULL)
{
p->rear->next=u; //
p->rear=u; //將隊尾指標指向新插入的節點上
}
if(p->front==NULL)
{
p->front=u;
}
}
//出棧
int deleteQueue(Piont *p,char *ch)
{
Queue *q;
if(p->front==NULL)
{
printf("佇列為空\n");
return 0;
}
else{
*ch =p->front->date;
q =p->front;
p->front=p->front->next;
if(p->front==NULL)
{
p->rear=NULL;
}
free(q);
return 1;
}
}
//取隊頭元素
char getQueue(Piont *p)
{
char ch;
if(p->front==NULL)
{
printf("佇列為空\n");
return 0;
}
else{
ch = p->front->date;
return ch;
}
}
int main()
{
Piont p; //二級指標指向指標,指標指向結構體變數或普通變數4r-
char x;
chongqueue(&p);
inqueue(&p,'A');
inqueue(&p,'B');
inqueue(&p,'D');
x=getQueue(&p);
printf("%c\n",x);
return 0;
}