1 /* 2 头指针 ---->不存数据--->A->B->C->NULL 3 4 增 头插 第一个结点前面插入 修改head指针的方向 5 删除 头删 删除第一个结点 需要修改head指针 分情况讨论 6 第一个结点不存数据 为了操作方便 7 8 结构体 结构体指针... 9 10 ----------------------------------------------------------- 11 数据+对应增删改查 12 13 栈 先进后出的数据结构 14 15 ctrl+z 撤回 能够撤回多次 16 必须记录下最近的每一次操作 每次撤回最近的一次操作 17 最后做的操作 最先被撤回----->先进后出的数据 后进后出的数据结构 18 19 栈区 内存中的一个区域 20 下棋 悔棋 每一步都记录下来 每次悔棋 退回上一次的操作 21 22 记录-->增加一个数据 撤销 --->删除一个数据 23 24 栈的实现 顺序表 选择尾插和尾删(如果选择数组开头作为插入和删除的位置) 25 链表的方式 选择一端进行插入和删除 26 头插+头删 (尾插+尾删) 27 28 队列 先进后出的数据结构 排队 先到先得 29 先排队 那么先买到(先出队) 30 31 32 */ 33 #include<stdio.h> 34 #include<stdlib.h> 35 typedef struct node 36 { 37 int data; 38 struct node*next; 39 }NODE; 40 void push(NODE*head, int data);//压栈 入栈 插入一个数据 (必须插入到栈顶) 41 int isEmpty(NODE*head); 42 int pop(NODE*head); 43 int main() 44 { 45 NODE*head = (NODE*)malloc(sizeof(NODE)); 46 head->next = NULL; 47 //栈和队列主要操作就是插入和删除 48 49 #if 0//示列 进制转换 50 int x = 233; 51 while (x != 0) 52 { 53 push(head, x % 2); 54 x /= 2; //x>>=1; 55 } 56 while (isEmpty(head) == 0) 57 { 58 printf("%d", pop(head)); 59 } 60 #endif 61 #if 0// 62 char name[] = "lost rivers"; 63 int i = 0; 64 while (name[i] != '