数据结构栈的插入和删除

#include<stdio.h> #include<stdlib.h> typedef struct stack { int data; struct stacknext; }stack; //栈:LIFO只能在栈顶删除插入(类似头插法) stack init() { stack* L = (stack*)malloc(sizeof(stack)); L->data = 0;// 表示当前栈的元素个数,为0时表示空栈 L->next = NULL; return L; } void judje(stack* L){ //第一步判断栈是否为空 //stack* un = L; if (L->data == 0 || L->next == NULL) printf(“栈空 ”); else printf(“栈顶元素是:%d ”, L->next->data); } void insStack(stack* L, int data) { stack* S = (stack*)malloc(sizeof(stack)); S->data = data; S->next = L->next; L->next = S; L->data++;//表示栈元素加一 } void outStack(stackL,int data){//delete函数 if (L->data == 0 || L->next == NULL) printf(“栈空,删除失败 ”); else { printf(“删除栈顶元素%d 新栈参数: ”, L->next->data); stack S = L->next; //L->next = L->next->next; L->next = S->next; free(S);//vs2022编译器中后面不再调用S结点即可成功执行free //否则会是:free之前可运行但free之后的代码不能运行 } } void show(stack* L) { stack* beiyong=L->next; while (beiyong != NULL) { printf("%d->", beiyong->data); beiyong = beiyong->next; } printf(“NULL ”); } int main() { stack* L = init(); insStack(L, 1); insStack(L, 3); insStack(L, 5); insStack(L, 7); insStack(L, 9); judje(L); show(L); outStack(L, 9); judje(L); show(L); stack* S = init(); judje(S); show(S); }

经验分享 程序员 微信小程序 职场和发展