您好,登錄后才能下訂單哦!
列隊數據結構圖形
stC代碼實現,PHP程序需要懂C代碼這是基礎哈
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#define N 100 //定義常量N 為10
#define mytype int //定義常量mytype 替換int
struct MyQueue
{
mytype data[N];//數組存儲隊列
int front;//拉屎 定義隊頭
int rear;//吃東西 定義隊尾
};
typedef struct MyQueue myQ;
/*
代碼說明
在我們初始化隊列的過程中呢?如果隊頭和隊尾重回就表示隊列為空,這里我們設置隊頭和隊尾為0
在初始化內存空間為0
myQ *p 表示INT類型指針
*/
void init(myQ *p)
{
p->front = p->rear = 0;
memset(p->data,0,sizeof(mytype)*N);
}
/*
判斷隊列是否滿,如果隊尾等于N 表示空間已經滿了,就返回1 如果沒滿就返回O
C 語言中貌似沒有BOOL類型數據,就用1表示真O表示假。其實和PHP中的BOOL類型原理是一樣的
*/
int isfull(myQ *p)
{
if(p->rear == N)
{
return 1;
}else
{
return 0;
}
}
/*
如果隊頭等于隊尾就表示列隊為空,就返回1 否則返回O
*/
int isempty(myQ *p)
{
if(p->front==p->rear)
{
return 1;
}else{
return 0;
}
}
/*
入隊操作
判斷隊列是否滿,如果滿了就RETURN,如果沒滿就把要插入的數據添加到隊尾,同時隊尾指針往后移動一位
*/
void array_unshift(myQ *p,mytype insertdata)
{
if(isfull(p)==1)
{
return;
}else{
p->data[p->rear] = insertdata;
p->rear+=1;
}
}
/*
出隊操作
判斷如果隊列為空就返回0
*/
void deQ(myQ *p)
{
if(isempty(p)==1)
{
return 0;
}
//因為隊尾是不變的,用隊頭減去隊尾就表示
int index = p->rear-p->front;
if(index==1)
{
p->rear = 0;
}else{
int i;
for(i=0;i<index-1;i++)
{
p->data[i] = p->data[i+1];
}
p->rear-=1;
}
}
mytype getlast(myQ *p)
{
if(isempty(p)==1)
{
return 0;
}
else{
mytype data = p->data[p->front];
int i;
int index = p->rear-p->front;
for(i=0;i<index-1;i++)
{
p->data[i] = p->data[i+1];
}
return data;
}
}
mytype array_pop(myQ *p)
{
if(isempty(p)==1)
{
return 0;
}else{
int i;
mytype index = p->rear-p->front;
for(i=index;i>=0;i--)
{
p->data[i] = p->data[i-1];
}
}
return p->data[p->rear];
}
void print(myQ *p)
{
printf("\n");
if(isempty(p)==1)
{
return 0;
}else{
int i;
for(i=p->front;i<p->rear;i++)
{
printf("%d",p->data[i]);
}
}
}
說明:以上代碼通過測試可以使用,就不全面做注解了。這里模擬了兩個PHP 的系統函數array_shift從頭部讀取和array_pop從尾部讀取函數
使用隊列時插入在一端進行而刪除在另一端進行,就是一種先進先出的數據結構。在大多數的項目當中呢?隊列多半是加上線程一同操作,下一章會講解多線程與隊列。幫助大家理解消息隊列。請多多支持博文。重申一遍由于本人技術水平有限,文章有不足或者錯誤的地方,就多多指正
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。