具体解释来自《挑战程序设计竞赛2:算法和数据结构》,其它预备知识内容请自行查询维基百科。
用数组实现栈(Stacks)、队列(Queue)和双向链表(Doubly Linked List)的伪代码
栈(Stacks)
/*Program-4.1 用数组实现栈*/
initalize()
top=0;
isEmpty()
return top==0;
isFull()
return top>=MAX-1;
push(x)
if isFull()
error;
top++;
S[top]=x;
pop()
if isEmpty()
error;
top--;
return S[top+1];
队列(Queue)
/*Program-4.2 用数组实现队列*/
initalize()
head=tail=0;
isEmpty()
return head==tail;
isFull()
return head==(tail+1)%MAX;
enqueue(x)
if isFull()
error;
Q[tail]=x;
if tail+1==MAX
tail=0;
else
tail++;
dequeue()
if isEmpty()
error;
x=Q[head];
if head+1==MAX;
head=0;
else
head++;
return x;
双向链表(Doubly Linked LIst)
/*Program-4.2 用数组实现队列*/
//结点
struct Node{
int key;
Node *prev,*next;
};
//初始化
Node *nil;
void init(){
nil=(Node *)malloc(sizeof(Node));
nil->next=nil;
nil->prev=nil;
}
//插入元素
void insert(int key){
Node *x=(Node *)malloc(size(Node));
x->key=key;
x->next=nil->next;
nil->next->prev=x;
nil->next=x;
x->prev=nil;
}
//搜索元素
Node* listSearch(int key){
Node *cur=nil->next;
while(cur!=nil&&cur->key!=key){
cur=cur->next;
}
return cur;
}
//删除元素
void deleteNode(Node *t){
if(t==nil) return;
t->prev->next=t->next;
t->next->prev=t->prev;
free(t);
}
void deleteFirst(){
deleteNode(nil->next);
}
void deleteLast(){
deleteNode(nil->prev);
}
void deleteKey(int key){
deleteNode(listSearch(key));
}
版权声明:本文为qq_35504607原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。