#include<stdio.h>
#include<stdlib.h>
#define ElemType int
typedef struct LNode{
ElemType data;
LNode *next;
}LNode, *Linklist;
bool init_linklist(Linklist &linklist);
bool list_headInsert(Linklist &linklist, ElemType data);
bool list_botmInsert(Linklist &linklist, ElemType data);
void output_linklist(Linklist &linklist);
ElemType getDataByIndex(Linklist &linklist, int index);
bool delDataByIndex(Linklist &linklist, int index);
bool addDataByIndex(Linklist &linklist, ElemType data, int index);
int getLength(Linklist &linklist);
/** 下面是栈的代码 **/
typedef struct Struct {
Linklist data;
int length;
}*StackLinklist;
bool init_stackLinklist(StackLinklist &stackLinklist) {
// stackLinklist -> length = (int*)malloc(sizeof(int));
stackLinklist -> length = 0;
stackLinklist -> data = (LNode*)malloc(sizeof(Linklist));
init_linklist(stackLinklist -> data);
return true;
}
ElemType stack_pop(StackLinklist &stackLinklist) {
if(stackLinklist -> length <= 0) {
return -1;
} else {
stackLinklist -> length --;
ElemType value = getDataByIndex(stackLinklist -> data, 1);
delDataByIndex(stackLinklist -> data, 1);
return value;
}
}
bool stack_insert(StackLinklist &stackLinklist, ElemType data) {
// 使用头插法
list_headInsert(stackLinklist -> data, data);
stackLinklist -> length ++;
return true;
}
int get_stacklength(StackLinklist &stackLinklist) {
return stackLinklist -> length;
}
int main() {
StackLinklist stackLinklist;
stackLinklist -> length = 0;
init_stackLinklist(stackLinklist);
stack_insert(stackLinklist, 1);
stack_insert(stackLinklist, 2);
stack_insert(stackLinklist, 3);
stack_insert(stackLinklist, 4);
int num = get_stacklength(stackLinklist);
printf("弹出元素:%d", stack_pop(stackLinklist)); printf(", 剩余长度长度:%d\n", get_stacklength(stackLinklist));
printf("弹出元素:%d", stack_pop(stackLinklist)); printf(", 剩余长度长度:%d\n", get_stacklength(stackLinklist));
printf("弹出元素:%d", stack_pop(stackLinklist)); printf(", 剩余长度长度:%d\n", get_stacklength(stackLinklist));
printf("弹出元素:%d", stack_pop(stackLinklist)); printf(", 剩余长度长度:%d\n", get_stacklength(stackLinklist));
printf("弹出元素:%d", stack_pop(stackLinklist)); printf(", 剩余长度长度:%d\n", get_stacklength(stackLinklist));
return 0;
}
/** 下面是栈的实现方法用于调用 **/
bool init_linklist(Linklist &linklist) {
linklist->next = NULL;
return true;
}
// 头插法
bool list_headInsert(Linklist &linklist, ElemType data) {
LNode *tem_node = (LNode*)malloc(sizeof(LNode));
tem_node->data = data;
tem_node -> next = linklist -> next;
linklist -> next = tem_node;
return true;
}
// 尾插法
bool list_botmInsert(Linklist &linklist, ElemType data) {
LNode *tem_node = (LNode*)malloc(sizeof(LNode));
tem_node->data = data;
tem_node->next = NULL;
LNode *temp = linklist->next;
while(temp->next != NULL) temp = temp->next;
temp->next = tem_node;
return true;
}
void output_linklist(Linklist &linklist) {
LNode *temp = linklist -> next;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
// 从第一个元素开始索引,index不得小于1
ElemType getDataByIndex(Linklist &linklist, int index) {
LNode *tem_node = linklist->next;
if (index < 1) return -1;
while(--index) {
if (tem_node -> next == NULL) return -1;
tem_node = tem_node->next;
}
return tem_node->data;
}
// 删除第i个元素
bool delDataByIndex(Linklist &linklist, int index){
LNode *tem_node = linklist;
if (index < 1) return false;
while(--index) {
if (tem_node -> next == NULL) return false;
tem_node = tem_node->next;
}
LNode *tem_free = tem_node->next;
tem_node -> next = tem_node->next->next;
free(tem_free);
return true;
}
// 访问第index个元素
bool addDataByIndex(Linklist &linklist, ElemType data, int index){
LNode *new_node = (LNode*)malloc(sizeof(LNode));
new_node -> next = NULL;
new_node -> data = data;
LNode *tem_node = linklist;
while(--index) {
if (tem_node -> next == NULL) return false;
tem_node = tem_node->next;
}
new_node -> next = tem_node -> next;
tem_node -> next = new_node;
return true;
}
// 获取表长(不算头节点)
int getLength(Linklist &linklist){
LNode *tem_node = linklist;
int length = 0;
while(tem_node -> next != NULL) {
length ++;
tem_node = tem_node -> next;
}
return length;
}
输出:
弹出元素:4, 剩余长度长度:3
弹出元素:3, 剩余长度长度:2
弹出元素:2, 剩余长度长度:1
弹出元素:1, 剩余长度长度:0
弹出元素:-1, 剩余长度长度:0