隊列+特殊矩陣的壓縮存儲

對頭出,隊尾入纤控。
基本操作

InitQueue(*Q)
QueueEmpty(Q)
EnQueue(*Q,x)
DeQueue(*Q,*x)
GetHead(Q, *x)

順序?qū)崿F(xiàn)

#define MaxSize 50
typedef struct
{
    ElemType data[MaxSize];
    int front, rear;
}* SqQueue;

初始時Q->front=Q->rear=0
空隊時Q->front==Q->rear
其余時候front指向隊頭,rear指向隊尾的后一個位置
但會出現(xiàn),數(shù)組前面由于出隊空了很多位置享钞,但rear==MaxSize無法繼續(xù)入隊的假溢出現(xiàn)象。
循環(huán)隊列
初始時:Q->front=Q->rear=0
隊首出隊時加一:Q->front=(Q->front+1)%MaxSize
隊尾入隊時加一:Q->rear=(Q->rear+1)%MaxSize
隊列長度:(Q->rear+MaxSize-Q->front)%MaxSize
由于隊空和隊滿時都有Q->front==Q->rear無法判斷
解決辦法
1.入隊時少用一個隊列單元
隊滿:(Q->rear+1)%MaxSize==Q->front
隊空:Q->front==Q->rear
2.增設(shè)表示元素個數(shù)的數(shù)據(jù)成員
3.增設(shè)tag诀蓉,代表上次操作栗竖,若tag為0,由于出隊導(dǎo)致front==rear則隊空渠啤,為1狐肢,則是由入隊導(dǎo)致的,則隊滿

隊列.PNG

初始化

void InitQueue(SqQueue Q)
{
    Q->rear=Q->front=0;
}

判空

bool isEmpty(SqQueue Q)
{
    if(Q->rear==Q->front)    return true;
    else    return false;
}

入隊

bool EnQueue(SqQueue Q, ElemType x)
{
    if((Q->rear+1)%MaxSize==Q->front) return false;
    Q->data[Q->rear]=x;
    Q->rear=(Q->rear+1)%MaxSize;
    return true;
}

出隊
bool DeQueue(SqQueue Q, ElemType* x)
{
if(Q->rear==Q->front) return false;
*x=Q->data[Q->front];
Q->front=(Q->front+1)%MaxSize;
return true;
}


鏈?zhǔn)酱鎯Y(jié)構(gòu)

同時帶有隊頭指針和隊尾指針的單鏈表

typedef struct
{
    ElemType data;
    struct LinkNode *next;
}LinkNode;

typedef struct
{
    LinkNode *front, *rear;
}LinkQueue;

為使其空隊時插入刪除操作統(tǒng)一沥曹,一般將其設(shè)計成帶頭節(jié)點的單鏈表


帶頭節(jié)點單鏈表實現(xiàn)的隊列.PNG

初始化

void InitQueue(LinkQueue* Q)
{
    Q->front=Q->rear=(LinkNode*)malloc(size of(LinkNode));
    Q->front->next=NULL份名;
}

判空

bool IsEmpty(LinkQueue* Q)
{
    if(Q->front==Q->rear)    return true;
    return false;
}

入隊

void EnQueue(LinkQueue* Q, ElemType x)
{
    LinkNode* s=(LinkNode*)malloc(size of(LinkNode));
    s->data=x;
    s->next=NULL;
    Q->rear->next=s;
    Q->rear=s;
}

出隊

bool DeQueue(LinkQueue* Q, ElemType* x)
{
    if(Q->front==Q->rear)    return false;
    LinkNode* first=Q->front->next;
    *x=first->data;
    Q->front=first->next;
    if(Q->rear==first)            //原隊列只有一個節(jié)點,刪除后變空
        Q->rear=Q->next;
    free(first);
    return true;
}

雙端隊列

兩端都可以進行入隊和出隊操作
輸出受限的雙端隊列:出隊在某一段進行
輸入受限的雙端隊列


隊列應(yīng)用

二叉樹層次遍歷
使用隊列來保存下一步的處理順序
1.根節(jié)點入隊
2.若隊列為空則遍歷完畢妓美,否則重復(fù)3
3.隊首出隊僵腺,并訪問之,將其左孩子和右孩子依次入隊部脚,返回2
計算機系統(tǒng)中的應(yīng)用
1.解決主機與外部設(shè)備之間速度不匹配的問題(打印數(shù)據(jù)緩沖區(qū))
2.解決由多用戶引起的資源競爭問題(CPU的分配)


特殊矩陣的壓縮存儲

將矩陣更有效地存儲在內(nèi)存中想邦,并能方便地提取矩陣中的元素
壓縮矩陣:為多個值相同的元素只分配一個存儲空間,對零元素不分配存儲空間委刘。
特殊矩陣:具有許多相同矩陣元素或零元素丧没,且分布有一定規(guī)律性。(對稱矩陣锡移,上下三角矩陣呕童,對角矩陣)
找出特殊矩陣中值相同的矩陣元素的分布規(guī)律,把那些呈現(xiàn)規(guī)律性分布的淆珊,值相同的多個矩陣元素壓縮存儲到一個存儲空間中夺饲。
關(guān)鍵在于找A和B的下標(biāo)轉(zhuǎn)換
1.對稱矩陣
A[1...n][1...n]->B[n(n+1)/2]
2.三角矩陣
A[1...n][1...n]->B[n(n+1)/2+1]
那個1是用來存三角區(qū)域的常數(shù)的
3.對角矩陣
4.稀疏矩陣
將非零元素及其相應(yīng)的行和列構(gòu)成一個三元組(行標(biāo),列標(biāo)施符,值)往声,失去了隨機存取特性。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末戳吝,一起剝皮案震驚了整個濱河市浩销,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌听哭,老刑警劉巖慢洋,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塘雳,死亡現(xiàn)場離奇詭異,居然都是意外死亡普筹,警方通過查閱死者的電腦和手機败明,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來太防,“玉大人妻顶,你說我怎么就攤上這事⌒油罚” “怎么了盈包?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵沸呐,是天一觀的道長醇王。 經(jīng)常有香客問我,道長崭添,這世上最難降的妖魔是什么寓娩? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮呼渣,結(jié)果婚禮上棘伴,老公的妹妹穿的比我還像新娘。我一直安慰自己屁置,他們只是感情好焊夸,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蓝角,像睡著了一般阱穗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上使鹅,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天揪阶,我揣著相機與錄音,去河邊找鬼患朱。 笑死鲁僚,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裁厅。 我是一名探鬼主播冰沙,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼执虹!你這毒婦竟也來了拓挥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤声畏,失蹤者是張志新(化名)和其女友劉穎撞叽,沒想到半個月后姻成,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡愿棋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年科展,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糠雨。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡才睹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甘邀,到底是詐尸還是另有隱情琅攘,我是刑警寧澤代态,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布牍汹,位于F島的核電站顿乒,受9級特大地震影響预烙,放射性物質(zhì)發(fā)生泄漏再悼。R本人自食惡果不足惜逛腿,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一匀伏、第九天 我趴在偏房一處隱蔽的房頂上張望蜘醋。 院中可真熱鬧邮府,春花似錦荧关、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仙辟,卻和暖如春同波,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背欺嗤。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工参萄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人煎饼。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓讹挎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吆玖。 傳聞我的和親對象是個殘疾皇子筒溃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容