棧和佇列都是限定操作的線性表。
棧
是限定僅在表尾進行插入或刪除操作的線性表。對棧而言,表尾稱為棧頂,表頭稱為棧底。
棧
的特點是後進先出(
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 空棧。插入叫入棧,刪除元素叫出棧。順序棧,的順序儲存結構是利用一組 位址連續的儲存單元,...