資料結構(第3章 棧和佇列)

2021-07-05 19:53:20 字數 2999 閱讀 7747

棧和佇列都是限定操作的線性表。

是限定僅在表尾進行插入或刪除操作的線性表。對棧而言,表尾稱為棧頂,表頭稱為棧底

的特點是後進先出

lifo,last in first out

)。佇列

是限定在表尾進入插入,在表頭進行刪除操作的線性表。表尾稱為隊尾,表頭稱為隊頭

佇列

的特點是先進先出

fifo,first in first out

)。與線性表類似,棧也有兩種儲存結構表示。即順序儲存結構與鏈式儲存結構。

/*棧的順序儲存結構*/

typedef struct

seq_stack_t;

/*棧的鏈式儲存結構*/

typedef struct link_stack

link_stack_t;

由於棧的操作是線性表操作的特例,故而鏈式棧的操作易於實現。以下描述的是順序棧的基本操作:

/*順序棧的初始化*/

int seq_stack_init(seq_stack_t *seq_stack)

seq_stack->top = seq_stack->base;

seq_stack->stacksize = stack_init_size;

return ok;

}/*順序棧的棧頂壓入元素*/

int push(seq_stack_t *seq_stack, int elem)

seq_stack->top = seq_stack->base + seq_stack->stacksize;

seq_stack->stacksize += stackincrement;

}*(seq_stack->top++) = elem;

return ok;

}/*順序棧的棧頂彈出元素*/

int pop(seq_stack_t *seq_stack, int *elem)

*elem = *(--seq_stack->top);

return ok;

}/*順序棧被置為空棧*/

void seq_stack_clear(seq_stack_t *seq_stack)

/*順序棧是否為空棧*/

int seq_stack_empty(seq_stack_t *seq_stack)

與線性表類似,佇列也有兩種儲存結構表示。即順序儲存結構與鏈式儲存結構。

2.1

順序佇列

/*佇列的順序儲存結構-- 迴圈佇列*/

#define maxqsize 100 /*最大佇列長度*/

typedef struct

seq_queue_t;

/*迴圈佇列的基本操作*/

/*迴圈佇列的初始化*/

int seq_queue_init(seq_queue_t *queue)

queue->front = queue->rear = 0;

return ok;

}/*迴圈佇列的隊尾插入元素*/

int seq_queue_add(seq_queue_t *queue, int e)

queue->base[queue->rear] = e;

queue->rear = (queue->rear + 1) % maxqsize;

return ok;

}/*迴圈佇列的隊頭刪除元素*/

int seq_queue_del(seq_queue_t *queue, int *e)

*e = queue->base[queue->front];

queue->front = (queue->front + 1) % maxqsize;

return ok;

}

2.2

鏈式佇列

鏈式佇列的儲存結構:

/* 佇列的鏈式儲存結構-- 鏈式佇列*/

typedef struct queue_node

queue_node_t;

typedef struct

link_queue_t;

鏈式佇列的基本操作:

/*鏈式佇列的初始化: 構造乙個空佇列*/

int link_queue_init(link_queue_t *queue)

queue->front->next = null;

return ok;

}/*鏈式佇列的隊尾插入新元素*/

int link_queue_add(link_queue_t *queue, int e)

node->data = e;

node->next = null;

queue->rear->next = node;

queue->rear = node;

return ok;

}/*鏈式佇列的隊頭刪除元素*/

int link_queue_del(link_queue_t *queue, int *e)

node = queue->front->next;

*e = node->data;

queue->front->next = node->next;

/*如果待刪除的結點也是隊尾結點,則修改隊尾指標*/

if (queue->rear == node)

free(node);

return ok;

}

第3章 資料結構 佇列

佇列的定義 先進先出 插入在隊尾,刪除在隊頭 抽象型別定義 佇列順序儲存 出佇列 移動隊頭指標 空佇列 front rear 滿佇列 front rear 假溢位 問題 佇列有空位,但是無法存放 判斷佇列空或滿 法2 空閒單元 還有乙個空閒單元時,隊列為滿 佇列長度計算公式 rear front l...

第3章棧和佇列

在寫了2章部落格後我突然明白了許多,有些東西只是寫下來其實是沒有多大用,只不過是把東西從乙個地方搬到另乙個地方,而我其實的確是僅僅把課本上的內容抄了一遍而已,現在我覺得資料結構最重要的是演算法,因此如果想學好它首先應該把演算法看懂,其次把它理解著背過,畢竟最後還是用在操作上,所以我覺得第3章的重點在...

資料結構 3 棧和佇列

棧和佇列也算是 資料型別。以為都是在首位操作,棧和佇列 克服了 線性表新增刪除需要移動大量元素的弱點。棧僅在尾部進行插入和刪除,尾部叫做棧頂,表頭叫做棧底。後進先出。last in first out lifo 空棧。插入叫入棧,刪除元素叫出棧。順序棧,的順序儲存結構是利用一組 位址連續的儲存單元,...