栈-stack(A pile of things)
定义:栈是一种只能在一端进行插入或删除操作的线性表。
特点:先进后出(First In,Last Out--FILO)
1.顺序栈:
栈的实现:
int stack[maxSize];
int top = -1
元素入栈:
stack[++top] = 值1; // top先自增1,再赋值值1
元素出栈:
值2 = stack[top--]; // 先取top所指的值2, top再减1
栈空:
top == -1为真,则栈空
栈满:
top == manSize - 1 为真,则栈满
2.链式栈:
创建带头结点链表:
LNode *head = (LNode*) malloc(sizeof(LNode));
head->next = NULL;
LNode *top = NULL;
元素A入栈:
LNode *head = (LNode*) malloc(sizeof(LNode));
head->next = NULL;
top = (LNode*) malloc(sizeof(LNode));
top->next = NULL;
top->data = 'A';
top->next = head->next;
head->next = top;
连续多个元素入栈(在头结点处插入):
元素C出栈:
LNode *head = (LNode*) malloc(sizeof(LNode));
head->next = NULL;
x = top->data;
head->next = top->next;
free(top);
top = head->next;
栈空:
head->next = NULL 为真,则栈空;
栈满:
只要有足够的内存,栈就不会满。
队列-Queue
定义:队列是一种插入元素只能在一端能进,删除元素只能在另一端进行的线性表。
特点:先进先出(First In,First Out--FILO)
1.顺序队:
实现队:
int queue[maxSize];
int front = 0,rear = 0;
环状入队:
rear = (rear + 1)%maxSize;
queue[++rear] = x;
环状出队:
rear = (front + 1)%maxSize;
x = queue[++front];
环状对空:
front == rear为真
环状队满:
front == (rear + 1) % maxSize为真
2.链队:
入队D节点(rear指针所指的节点后面插入新节点,让rear指针指向新节点D):
rear->next = NULL;
rear->data = 'D';
rear->next = p->next;
p->next = rear;
出队(删除第一个数据节点):
x = q->data;
front->next = q->next;
free(q);
q = front->next;
对空:
头结点的next指针为NULL;
队满:
只要有足够的内存,队就不会满。