資料結構 完成順序棧,鏈式棧的基本操作

2021-08-18 14:52:00 字數 3716 閱讀 1620

seqstack.h

#pragma once

#include #define title printf("\n*************************=%s*************************\n",__function__);

typedef char seqstacktype;

typedef struct seqstack

seqstack;

void seqstackinit(seqstack* stack);//初始化

void destorystack(seqstack* stack);//銷毀

void seqstackpush(seqstack* stack,seqstacktype value);//入棧

void seqstackpop(seqstack* stack);//出棧

void seqstackresize(seqstack* stack);//擴容

seqstacktype seqstackget(seqstack* stack);//取棧頂元素

#include "seqstack.h"

#include void seqstackinit(seqstack* stack)

stack->size = 0;

stack->capacity = 1000;

stack->data = (seqstacktype*)malloc(stack->capacity * sizeof(seqstacktype));

}void destorystack(seqstack* stack)

void seqstackprint(seqstack* stack,const char* msg)

printf("\n");

}void seqstackresize(seqstack* stack)

free(stack->data);

stack->data = new_ptr;

return;

}void seqstackpush(seqstack* stack,seqstacktype value)

if(stack->size >= stack->capacity)

stack->data[stack->size++] = value;

return;

}void seqstackpop(seqstack* stack)

if(stack->size == 0)

if(stack->size == 1)

stack->size--;

}seqstacktype seqstackget(seqstack* stack)

seqstacktype ret = stack->data[stack->size-1];

return ret;}/

// 以下為測試** //

void liststackinit(liststack** head);//初始化

void liststackprint(liststack* head,const char* msg);//列印

liststack* createnode(liststacktype value);//建立結點

void destroynode(liststack* node);//銷毀結點

void liststackpush(liststack** head,liststacktype value);//入棧

void liststackpop(liststack** head);//出棧

liststacktype liststackget(liststack* head);//取棧頂元素

#include "seqliststack.h"

void liststackinit(liststack** head)

*head = null;

}//銷毀函式

void liststackdestroy(liststack** head)

liststack* cur = *head;

for(;cur != null;cur = cur->next)

*head = null;

}void liststackprint(liststack* head,const char* msg)

liststack* cur = head;

while(cur != null)

printf("\n");

return;

}liststack* createnode(liststacktype value)

void destroynode(liststack* node)

//入棧函式,入棧相當於鍊錶的頭插

void liststackpush(liststack** head,liststacktype value)

liststack* newnode = createnode(value);

newnode->next = *head;

*head = newnode;

return;

}//出棧函式,出棧相當於鍊錶的頭刪

void liststackpop(liststack** head)

if(*head == null)

liststack* to_delete = *head;

*head = to_delete->next;

destroynode(to_delete);

return;

}liststacktype liststackget(liststack* head)

liststack* cur = head;

return cur->data;

}///

// 以下為測試** //

資料結構 順序棧和鏈式棧

棧 限定在表尾進行插入和刪除操作的線性表。允許插入和刪除的一端成為棧頂,另一端稱為棧底。棧的操作特性 後進先出 順序棧 設定top指標指示棧頂元素在陣列中的位置。進棧 top 1 棧空 top 1 出棧 top 1 棧滿 top maxsize const int max size 100 temp...

資料結構 順序,鏈式棧的實現

功能 1.初始化 2.銷毀 3.入棧 4.出棧 順序棧 seqstack.h pragma once include define max size 1000 typedef char seqstacktype 順序棧 typedef struct seqstack seqstack 初始化 voi...

資料結構 鏈式棧 不定長順序棧

棧 stack 又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元...