网站主题栏目分类,分销商城,wordpress 登陆页面模板,海淀区手机网站设计服务61. 数据结构 利用带头结点带环的结点实现栈的相关操作.因此, 每一个结点包括了一个前驱, 一个后继, 还有一个数据成员
typedef char DLinkStackType;typedef struct DLinkStack
{DLinkStackType data;struct DLinkStack* next;struct DLinkStack* prev;
}DLinkStack;2. 初始化…1. 数据结构 利用带头结点带环的结点实现栈的相关操作.因此, 每一个结点包括了一个前驱, 一个后继, 还有一个数据成员
typedef char DLinkStackType;typedef struct DLinkStack
{DLinkStackType data;struct DLinkStack* next;struct DLinkStack* prev;
}DLinkStack;2. 初始化 初始化即就是先给对应的结点申请一块内存, 然后将结点的数据成员置为 0 (个人所好), 然后将头结点的前驱后继依次指向空.
void DLinkStackInit(DLinkStack** stack)
{if(stack NULL || *stack NULL){return;//非法输入}*stack (DLinkStack*)malloc(sizeof(DLinkStack));(*stack) - next *stack;(*stack) - prev *stack;(*stack) - data 0;
}3. 入栈 将每一个结点从链表的尾部插入,即先创建一个新结点, 然后修改新结点和最后一个结点的指向, 将新结点插入链表, 然后修改头结点和新结点的指向, 便实现了入栈操作
void DLinkStackPush(DLinkStack* stack, DLinkStackType value)
{if(stack NULL){return;}DLinkStack* new_node CreatNewNode(value);DLinkStack* prev stack - prev;prev - next new_node;new_node - prev prev;new_node - next stack;stack - prev new_node;
}4. 出栈 将每一个结点链表的尾部删除, 即修改倒数第二个结点和头结点的指向, 然后将倒数第一个结点删除, 这样便可以完成出栈
void DLinkStackPop(DLinkStack* stack)
{if(stack NULL){return;//非法输入}if(stack - next stack){return;//空栈}DLinkStack* to_delete stack - prev;DLinkStack* prev to_delete - prev;//stack vs prevstack - prev prev;prev - next stack;DLinkStackNodeDestroy(to_delete);to_delete NULL;
}5. 创建结点
DLinkStack* CreatNewNode(DLinkStackType value)
{DLinkStack* new_node (DLinkStack*)malloc(sizeof(DLinkStack));new_node - data value;new_node - next NULL;new_node - prev NULL;return new_node;
}
6. 取栈顶元素 每次将头结点的下一个结点的数据返回, 即就完成了取栈顶元素
int DLinkStackGetFront(DLinkStack* stack, DLinkStackType* value)
{if(stack NULL){return -1;//非法输入}if(stack - next stack){return -1;//空栈}*value (stack - prev) - data;return 0;
} 7. 销毁栈 从链表的第一个结点(stack - next)开始, 依次删除每一个结点, 直到最后一个结点, 同时不要忘记将头结点(傀儡结点)也删除 void DLinkStackDestroy(DLinkStack** stack)
{if(stack NULL){return;//非法输入}if((*stack) - prev *stack){DLinkStackNodeDestroy(*stack);*stack NULL;}DLinkStack* next; DLinkStack* to_delete;int i DLinkStackSize(*stack);for(; i 0; i--){to_delete (*stack) - next;next to_delete - next;(*stack) - next next;next - prev *stack;DLinkStackNodeDestroy(to_delete);to_delete NULL;}DLinkStackNodeDestroy(*stack);*stack NULL;
} 如有错误,还望大家能够随时提出, 大家共同进步