如何增加网站的权重,公司注册网站需要提供什么文件,东莞网站建设aj工作室,网站推广效果如何栈
先进后出、后进先出
一、系统栈 大小#xff1a;8MB
1、局部变量
2、未经初始化为随机值
3、代码执行到变量定义时为变量开辟空间
4、当变量的作用域结束时回收空间
5、函数的形参和返回值
6、函数的调用关系、保护现场和恢复现场
7、栈的增长方向#xff0c;自高…栈
先进后出、后进先出
一、系统栈 大小8MB
1、局部变量
2、未经初始化为随机值
3、代码执行到变量定义时为变量开辟空间
4、当变量的作用域结束时回收空间
5、函数的形参和返回值
6、函数的调用关系、保护现场和恢复现场
7、栈的增长方向自高向低增长
二、栈FILO 怎样具备先进后出、后进先出
类似羽毛球桶
FILO栈
只允许从一端进行数据的插入和删除的线性存储结构线性表一对一的线性存储结构与顺序表、链式表类似
插入入栈、压栈 — 栈顶允许操作
删除出栈、弹栈 — 栈底不允许操作顺序表——顺序栈 满增栈 满减栈 空增栈 空减栈
入栈时操作方法不同
满、空栈
栈顶所在位置是否存有元素
增、减栈 取决于栈增长的方向
增栈顶由低地址向高地址
减栈顶由高地址向低地址
链式表——链式栈 栈顶、栈底 三.栈的基本操作
注只针对于链式栈
1.创建栈 5 LINKSTACK_LIST *creat_link()6 {7 LINKSTACK_LIST *plist malloc(sizeof(LINKSTACK_LIST));8 if(NULL plist)9 {10 perror(fail to malloc!);11 return NULL;12 }13 plist-phead NULL;14 plist-clen 0;15 16 return plist;17 }2.入栈头插 26 int push_head_linkstack(LINKSTACK_LIST *plist,DATA_TYPE data)27 {28 LINKSTACK_NODE *pnode malloc(sizeof(LINKSTACK_NODE));29 if(NULL pnode)30 {31 perror(fail to malloc);32 }33 pnode - data data;34 pnode -pnext NULL;35 36 pnode -pnext plist-phead;37 plist-phead pnode;38 39 plist-clen;40 return 0;41 }3.出栈 42 /* 出栈 shanchu*/43 int pop_head_delete(LINKSTACK_LIST *plist)44 {45 46 LINKSTACK_NODE *save malloc(sizeof(LINKSTACK_NODE)); 47 LINKSTACK_NODE *ptmp NULL;48 if(is_empty_linkstack(plist))49 {50 printf(kong );51 return 0;52 }53 else54 {55 ptmp plist-phead ;56 if(ptmp-pnext NULL)57 {58 plist-phead NULL;59 save-data ptmp-data;60 printf(删除的值:%d \n,save-data);61 free(ptmp);62 }63 else64 {65 plist - phead ptmp - pnext;66 save-data ptmp-data;67 printf(删除的值:%d \n,save-data);68 free(ptmp);69 }70 // free(save);71 }72 }4.获取栈顶元素 93 /*获取栈顶元素*/94 int linkstack_top_msg(LINKSTACK_LIST *plist)95 {96 LINKSTACK_NODE *p malloc(sizeof(LINKSTACK_NODE));97 LINKSTACK_NODE *ptmp NULL;98 if(is_empty_linkstack(plist))99 {
100 return 0;
101 }
102 else
103 {
104 ptmp plist-phead;
105 p ptmp;
106 printf(顶端元素:%d \n,p-data);
107 }
108
109 }5.清空栈
110 /*清空栈*/
111 int linkstack_msg_isempty(LINKSTACK_LIST *plist)
112 {
113 LINKSTACK_NODE *ptmp plist-phead;
114 if(is_empty_linkstack(plist))
115 {
116 return 0;
117 }
118 else
119 {
120 while(ptmp!NULL)
121 {
122 ptmp ptmp - pnext;
123 pop_head_delete(plist);
124 }
125 }
126 }6.销毁栈
127 /*销毁*/
128 int linkstack_destory(LINKSTACK_LIST *plist)
129 {
130 linkstack_msg_isempty(plist);
131 free(plist);
132 }
133 7.测试遍历. 74 /*遍历*/75 void list_for_each(LINKSTACK_LIST *plist)76 {77 if(is_empty_linkstack(plist))78 {79 printf(空);80 return ;81 }82 LINKSTACK_NODE *ptmp plist-phead;83 84 while(ptmp ! NULL)85 {86 printf(%d ,ptmp-data);87 ptmp ptmp - pnext;88 89 }90 putchar(\n);91 return ;92 }四、队列FIFO
概念
允许从一端进行数据插入而另一端进行数据删除的线性表
特性
先进先出、后进后出
应用场景缓冲区数据缓存
为了解决高速设备和低速设备交互时速度不匹配问题进行缓存缓冲
队列的基本操作
1.创建队列 5 /*创建队列*/6 QUEUE_LIST *creat_link()7 {8 QUEUE_LIST *plist malloc(sizeof(QUEUE_LIST));9 if(NULL plist)10 {11 perror(fail to malloc!);12 return NULL;13 }14 plist-phead NULL;15 plist-preal NULL;16 plist-clen 0;17 18 return plist;19 }2.入队 25 /*入队*/26 int push_tail_queue(QUEUE_LIST *plist,DATA_TYPE data)27 {28 29 QUEUE_NODE *pnode malloc(sizeof(QUEUE_NODE));30 if(NULL pnode)31 {32 perror(fail to malloc);33 return 0;34 }35 pnode-data data;36 pnode -pnext NULL;37 38 if(plist-preal ! NULL)39 {40 plist-preal-pnext pnode;41 plist-preal pnode;42 }43 else 44 {45 plist-preal pnode;46 plist-phead pnode;47 }48 plist-clen;49 }3.出队 50 /*出队*/51 int pop_tail_delete(QUEUE_LIST *plist)52 {53 QUEUE_NODE *ptmp;54 QUEUE_NODE *save;55 if(is_empty_queue(plist))56 {57 printf(kong );58 return 0;59 }60 else61 { 62 if(plist-phead-pnext NULL) //仅有一个数据63 {64 free(plist-phead);65 plist-phead plist-preal NULL;66 }67 else//多个数据68 {69 ptmp plist-phead-pnext;70 save ptmp;71 free(plist-phead);72 plist-phead ptmp;73 printf(对头第一个数据:%d \n,save-data);74 }75 plist-clen--;76 }77 }78 4.清空队列
114 /*清空队列*/
115 int queue_empty(QUEUE_LIST *plist)
116 {
117 QUEUE_NODE *ptmp plist-phead;
118 if(is_empty_queue(plist))
119 {
120 return 0;
121 }
122 else
123 {
124 while(ptmp!NULL)
125 {
126 ptmp ptmp - pnext;
127 pop_tail_delete(plist);
128 }
129
130 }
131
132 }5.获取队列队头的数据
96 /*获取队头信息*/97 int queue_top_msg(QUEUE_LIST *plist)98 {99 QUEUE_NODE *pmalloc(sizeof(QUEUE_NODE));
100 QUEUE_NODE *ptmp;
101
102 if(is_empty_queue(plist))
103 {
104 return 0;
105 }
106 else
107 {
108 ptmp plist-phead;
109 p ptmp;
110 printf(队头数据: %d \n,p-data);
111 }
112
113 }6.销毁队列
133 /*销毁队列*/
134 int queue_destort(QUEUE_LIST *plist)
135 {
136 queue_empty(plist);
137 free(plist);
138 }7.测试遍历 79 /*遍历*/80 void queue_for_each(QUEUE_LIST *plist)81 {82 if(is_empty_queue(plist))83 {84 printf(空);85 return ;86 }87 QUEUE_NODE *ptmp plist-phead;88 while(ptmp ! NULL)89 {90 printf(%d ,ptmp-data);91 ptmpptmp-pnext;92 }93 putchar(\n);94 return ;95 }