数据结构线性单链栈 线性单链栈简介
使用链存储结构的线性存储结构的栈为线性单链栈,线性存储结构是元素逻辑结构一对一,链存储结构是元素物理结构不连续,线性单链栈只能在栈顶操作(先进后出).
C语言实现代码#includeC++语言实现代码//包含标准输入输出库文件 #include //包含标准库库文件 typedef struct Element//类型定义结构元素 { int Data;//整数数据 struct Element*Next;//结构元素指针下一个 }Element;//元素 typedef struct//类型定义结构 { Element*Head;//元素指针头 int Length;//整数长度 }Single_Linked_Stack;//单链栈 Single_Linked_Stack Single_Linked_Stack_Create(void)//单链栈单链栈创造,空 { return(Single_Linked_Stack){malloc(sizeof(Element))};//返回单链栈头赋值分配字节元素 } void Single_Linked_Stack_Destroy(Single_Linked_Stack*single_linked_stack)//空单链栈销毁,单链栈指针单链栈 { for(;single_linked_stack->Length>0;--single_linked_stack->Length)//循环,单链栈长度大于0,单链栈长度前缀减减 { Element*Delete_Element=single_linked_stack->Head;//元素指针删除元素赋值单链栈头 single_linked_stack->Head=Delete_Element->Next;//单链栈头赋值删除元素下一个 free(Delete_Element);//释放删除元素 } free(single_linked_stack->Head);//释放单链栈头 } void Single_Linked_Stack_Insert(Single_Linked_Stack*single_linked_stack,int Insert_Data)//空单链栈插入,单链栈指针单链栈,整数插入数据 { Element*Insert_Element_Prev=single_linked_stack->Head,*Insert_Element=malloc(sizeof(Element));//元素指针插入元素上一个赋值单链栈头,元素指针插入元素赋值分配字节元素 for(int Index=0;Index Length;++Index)//循环,整数索引赋值0,索引小于单链栈长度,索引前缀加加 Insert_Element_Prev=Insert_Element_Prev->Next;//插入元素上一个赋值插入元素上一个下一个 Insert_Element->Data=Insert_Data;//插入元素数据赋值插入数据 Insert_Element->Next=Insert_Element_Prev->Next;//插入元素下一个赋值插入元素上一个下一个 Insert_Element_Prev->Next=Insert_Element;//插入元素上一个下一个赋值插入元素 ++single_linked_stack->Length;//单链栈长度前缀加加 } void Single_Linked_Stack_Delete(Single_Linked_Stack*single_linked_stack)//空单链栈删除,单链栈指针单链栈 { Element*Delete_Element=single_linked_stack->Head;//元素指针删除元素赋值单链栈头 for(int Index=0;Index Length;++Index)//循环,整数索引赋值0,索引小于单链栈长度,索引前缀加加 Delete_Element=Delete_Element->Next;//删除元素赋值删除元素下一个 free(Delete_Element);//释放删除元素 --single_linked_stack->Length;//单链栈长度前缀减减 } int Single_Linked_Stack_Obtain(Single_Linked_Stack single_linked_stack)//整数单链栈获取,单链栈单链栈 { for(int Index=0;Index Next;//单链栈头赋值单链栈头下一个 return single_linked_stack.Head->Data;//返回单链栈头数据 } int Single_Linked_Stack_Size(Single_Linked_Stack single_linked_stack)//整数单链栈尺寸,单链栈单链栈 { return single_linked_stack.Length;//返回单链栈长度 } int main(void)//整数主,空 { Single_Linked_Stack single_linked_stack=Single_Linked_Stack_Create();//单链栈单链栈赋值单链栈创造 for(int Select=5,Data;Select;scanf("%i",&Select))//循环,整数选择赋值5,整数数据,选择不等于0,格式扫描选择 { if(Select==1)//如果,选择等于1 { scanf("%i",&Data);//格式扫描数据 Single_Linked_Stack_Insert(&single_linked_stack,Data);//单链栈插入单链栈最后数据 } else if(Select==2)//否则如果,选择等于2 Single_Linked_Stack_Delete(&single_linked_stack);//单链栈删除单链栈最后数据 else if(Select==3)//否则如果,选择等于3 printf("%i",Single_Linked_Stack_Obtain(single_linked_stack));//格式打印单链栈获取单链栈最后数据 else if(Select==4)//否则如果,选择等于4 printf("%i",Single_Linked_Stack_Size(single_linked_stack));//格式打印单链栈尺寸单链栈 } Single_Linked_Stack_Destroy(&single_linked_stack);//单链栈销毁单链栈 }
#include//包含输入输出流库文件 struct Single_Linked_Stack//结构单链栈 { struct Element//结构元素 { int Data;//整数数据 Element*Next;//元素指针下一个 }*Head=new Element;//元素指针头赋值新元素 int Length=0;//整数长度赋值0 ~Single_Linked_Stack(void)//单链栈析构,空 { for(;Length>0;--Length)//循环,长度大于0,长度前缀减减 { Element*Delete_Element=Head;//元素指针删除元素赋值头 Head=Delete_Element->Next;//头赋值删除元素下一个 delete Delete_Element;//删除删除元素 } delete Head;//删除头 } void Insert(int Insert_Data)//空插入,整数插入数据 { Element*Insert_Element_Prev=Head;//元素指针插入元素上一个赋值头 for(int Index=0;Index Next;//插入元素上一个赋值插入元素上一个下一个 Element*Insert_Element=new Element{Insert_Data,Insert_Element_Prev->Next};//元素指针插入元素赋值新元素,插入元素数据赋值插入数据,插入元素下一个赋值插入元素上一个下一个 Insert_Element_Prev->Next=Insert_Element;//插入元素上一个下一个赋值插入元素 ++Length;//长度前缀加加 } void Delete(void)//空整数删除,空 { Element*Delete_Element=Head;//元素指针删除元素赋值头 for(int Index=0;Index Next;//删除元素赋值删除元素下一个 delete Delete_Element;//删除删除元素 --Length;//长度前缀减减 } int Obtain(void)//整数获取,空 { Element*Obtain_Element=Head;//元素指针获取元素赋值头 for(int Index=0;Index Next;//获取元素赋值获取元素下一个 return Obtain_Element->Next->Data;//返回获取元素下一个数据 } int Size(void)//整数尺寸,空 { return Length;//返回长度 } }; int main(void)//整数主,空 { Single_Linked_Stack single_linked_stack;//单链栈单链栈 for(int Select=5,Data;Select;std::cin>>Select)//循环,整数选择赋值5,整数数据,选择不等于0,标准输入选择 { if(Select==1)//如果,选择等于1 { std::cin>>Data;//标准输入索引和数据 single_linked_stack.Insert(Data);//单链栈插入最后数据 } else if(Select==2)//否则如果,选择等于2 single_linked_stack.Delete();//单链栈删除最后数据 else if(Select==3)//否则如果,选择等于3 std::cout< 编程交流群群号(QQ):387618421



