数据结构栈的插入和删除

  • Post author:
  • Post category:其他


#include<stdio.h>

#include<stdlib.h>

typedef struct stack {


int data;

struct stack

next;

}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(“栈空\n”);

else

printf(“栈顶元素是:%d\n”, 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(stack

L,int data){//delete函数

if (L->data == 0 || L->next == NULL)

printf(“栈空,删除失败\n”);

else {


printf(“删除栈顶元素%d\n新栈参数:\n”, 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\n”);

}

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);

}



版权声明:本文为weixin_45646601原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。