目录
一、知识点
1.栈空:top = -1; 栈满:top = MAX_SIZE - 1;
补充(可以跳过不看):
【栈:bottom(理论上有,实际都不写;要写的话就赋值 和top一样-1就行)】
【顺序表不循环队列:要想利用整个空间的话,可以左移整个队列,再存放(就是不循环只能左移再放了)】
2.共享栈和双向队列
3.栈实现队列、队列实现栈
4.函数栈、系统栈
栈底是main,之后按main里使用函数的顺序依次进栈、出栈;
5.不带头结点的双向循环链表
1.最后一个单独判断
p = h->prev; //先判断最后一个
Node *q = h;
while(q->next != h); //这样循环,链表最后一个节点没有判断
2.第一个单独判断
p = h; //先判断第一个
Node *q = h->next;
while (q != h);
二、链表浅试
1).不带头结点的双向循环链表-借鉴
转载自:
2)不带头结点的双向循环链表代码练习
运行终端输入:1)sh compile.sh
2)./dclist
1.dclist.h
#ifndef _DCLIST_H_
#define _DCLIST_H_
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DC_OK 0
#define DC_FAIL -1
typedef struct lnode
{
int data;
struct lnode *prev;
struct lnode *next;
}LNode;
// 创建不带头结点的双向循环链表头指针
int create_DCList_head(LNode **head);
// 创建链表节点
int create_new_node(LNode **new_node);
// 头插法
int insert_node(LNode **head, LNode *new_node);
// 显示链表
int display_list(LNode *head);
// 返回链表节点数
int get_len(LNode *head);
// 销毁链表
int dest