1樓:東風冷雪
p=q.front->next //取q所指的元素指標e=p->date; //將元素的值儲存在e中。
q->front->next=p->next //將q後繼元素的指標給q
貌似是佇列的刪除元素
有關佇列問題 q->rear->next=p;
2樓:
這是結點(元素)入隊的操作。(*q).rear是鏈隊的尾指標,指向鏈隊的最後乙個元素。
(*q).rear->next指的是鏈隊最後乙個元素的指標域。p是要入隊的新結點。
(*q).rear->next=p是新結點入隊的操作,即原來的最後乙個結點的指標域裡的指標指向了p,所以p就入隊了,成為鏈隊的最後乙個結點。(*q).
rear=p,就是鏈隊的尾指標指向剛剛入隊的尾結點p,為了再將新的結點入隊。若再將新的結點入隊再重複這兩句**即可。
3樓:匿名使用者
首先知道,q.rear是指標,指標就是位址,q.rear本身就是鏈式佇列的尾結點的位址(不是q.rear->next指向尾結點),p是新建結點,
所以 q->rear->next=p; 是p入隊,而 q.rear=p; 的意思是p結點位址此刻成為乙個尾結點位址,q.rear結點就是尾結點,也就是p結點。望採納
4樓:御含靈
佇列有個隊尾指標rear
這兩句話相當於在隊尾加入乙個元素p (*q).rear->next=p;
那麼隊尾就變成p了 (*q).rear=p;
5樓:匿名使用者
即 q->rear->next=p 讓p接入q->rear
q->rear=p 此時p為最後乙個節點,讓q->rear指向p
q.front->next=null什麼意思?
6樓:瀧馳軒
首先,這是乙個連結串列,q是乙個結構體,q.front應該你知道什麼吧!!!然後你畫出圖來,q.
front->next指的就是front的下乙個數值。null意味著它為空,即沒有任何數。
呵呵~~加油!
7樓:匿名使用者
這是 構造空佇列q中的一段**
8樓:
這個應該是連結串列中的**吧,
這個**的意思是指將乙個結點為空.
9樓:匿名使用者
當前指標位置的下一項對應的值賦值為null
資料結構中,迴圈佇列有一條語句q.base[q.rear]=e;沒看懂,貼主要**如下
10樓:happy活著就好
怎麼說沒有陣列呢,這裡是用陣列代替指標來賦值比較直觀吧其實也可以直接用指標操作的
剛開始的時候什麼元素都每入隊時,因該q.front = q.rear =0你可以去看下佇列初始化部分有的
然後剛開始q.base指向申請的一塊連續的空間 (初始化的動態分配儲存空間) 存放maxqsize個佇列元素
然後q.base[0] = e就是首個元素入隊 (而一開始就是q.rear=0,即q.
base[q.rear]=e 因為每次都是在隊尾入隊嘛 ) 然後應該是 q.rear=q.
rear+1了 同時為了防止下標超出maxqsize所以就有了 q.rear=(q.rear+1)%maxqsize;來後移隊尾指向的元素位置(其實是下乙個待入隊元素的下標,)
11樓:嘿you就你
請問這段**是在**看到的
關於資料結構的佇列實現問題
12樓:匿名使用者
#define ok 1
#define overflow 0
#define error 0
#include
#include
#include
typedef int status;
typedef char qelemtype;
typedef struct qnodeqnode,*queueptr;
typedef struct linkqueue;
構造乙個空佇列
插入元素e為q的新隊尾元素
若對不空則刪除q的對頭元素,用e返回其值,並返回ok
void main()
問題中的**問題挺多的,這是在其基礎之上修改的結果,基本忠實了原題目的**,實現了其目的
資料結構銷毀佇列q,free(q.front);然後為什麼還能執行q.front=q.rear;釋放之後,q.front還存在?
13樓:匿名使用者
這是鏈佇列,q.front指向的是鏈佇列的結點,注意鏈隊結點是用malloc分配的記憶體塊,c語言中malloc分配的記憶體塊只能用free來釋放 。 而q.
front本身只是個指標變數,根本不用free來釋放,在程式結束後就會自動釋放。
q.front=q.rear;意思是把鏈頭指標和鏈尾指標指向同乙個結點,這個結點就是鏈隊的頭結點,此時就表示該鏈隊列為空鏈了。
14樓:
free(q.front);
只是q.front所指的結點被釋放了,q.rear是剩餘的佇列結點的頭,q.front=q.rear;是讓隊頭指標,指向剩餘佇列的頭部結點
15樓:
free函式是對q.front指標指向的記憶體進行釋放,q.front指標依然存在,但它不能再指向已經釋放的記憶體區,不然就成了野指標,所以一般用null賦給它
資料結構題目解答,急急急,今天之前給出答案追加懸賞
16樓:it孤鶩
(1) a d
(2) b
(3) c
(4) a
(5) b a
(6)b
(7) c
(8) c
(9) c
(10) a
(11) b
(12) d
(13) d
(14) d
(15) d
資料結構c語言佇列執行不了
17樓:油條大巴
//修改的地方主要是將main()裡的 lqueue *lq 改為 lqueue lq ,
//其它函式作出相應的修改.
//1----進佇列
//請輸入要進佇列的資料:100
//4----顯示佇列
//此佇列有資料: 100->
//1----進佇列
//請輸入要進佇列的資料:200
//4----顯示佇列
//此佇列有資料: 100->200->
#include "stdio.h"
#include "malloc.h"
#define maxsize 50 //佇列的最大容量 //maxsize暫時沒有用到
//定義佇列的結構體
typedef int datatype;
typedef struct qnode
linkqueueqnode,*queueptr;
typedef struct
linkqueue,lqueue;
//置空隊
//原**linkqueue * init_lqueue()
void init_lqueue(linkqueue* q)
p->next=null;
q->front=q->rear=p; //帶頭結點的佇列
//原**
/*linkqueue *q;
q->front=q->rear=(linkqueueqnode*)malloc(sizeof(linkqueueqnode));
if(!q->front)
q->front->next=null;*/}
//入隊
int enterqueue(linkqueue* q,datatype e)
p->data=e;
p->next=null;
q->rear->next=p;
q->rear=p;
return 1;
}//出隊
int deletequeue(linkqueue* q,datatype *e)
p=q->front->next;
*e=p->data;
q->front->next=p->next;
if(q->rear==p)
free(p);
return 1;
}//判隊空
int empty_seqstack(linkqueue* q)
else
return 0;
}//顯示佇列
void print(linkqueue* q)
}int main()
else
break;
case 3: //判斷佇列空否
//原**j=empty_seqstack(lq);
j=empty_seqstack(&lq);
if (j==1) printf("此隊列為空!!!");
else printf("此佇列不空。");
break;
case 4: //顯示佇列
//原**print(lq);
j=empty_seqstack(&lq);
if (j==1)
else
}}while(k!=0);
return 0; //int main()要有返回值}
資料結構中求樹的先序遍歷為什麼要用佇列和棧
其實遞迴和棧的作用是一樣的,只是棧靠你自己寫,遞迴是系統幫你在棧裡寫 棧和佇列資料結構的特點,什麼情況下用到棧,什麼情況下用到佇列 各舉3個例子 棧和佇列資料結構的特點是 棧特點就是乙個先進後出的結構內。佇列特點就是乙個先進先出的結構。棧和佇列的區別是 資料結構不同佇列先進先出,棧先進後出。對插入和...
資料結構順序棧的定義問題,資料結構順序棧的問題
define stack init size 100 巨集定義常量 define stackincrement 10 同上typedef struct 結構體 sqstack 名字 解釋什麼?把你不明白的地方說出來。我發現很多人連基本的問問題都成問題。資料結構順序棧的問題 注 下面分別是三個檔案 棧...
在資料結構中,資料的邏輯結構,資料的儲存結構及資料的運算之間
資料的邏輯結構決定了資料間運算關係的具體定義,而資料的儲存結構與資料的運算方法,沒有直接的關係,資料的儲存結構決定了維護資料邏輯結構時各種操作的運算複雜程度。在資料結構課程中,資料的邏輯結構,資料的儲存結構及資料的運算之間存在著怎樣的關係?1 資料的邏輯結copy構說明資料元素bai之間的順序du關...