鏈棧的基本操作及回文

2021-06-20 22:11:04 字數 3400 閱讀 5631

標頭檔案linkstack.h   

#ifndef linkstack_h_included

#define linkstack_h_included

typedef int status;

typedef int selemtype;

#define ok 1

#define error -1

typedef struct node

node,*linkstack;

status initlinkstack(linkstack top);//構造乙個空棧

status destroylinkstack(linkstack top);//銷毀棧,使棧不再存在

status clearlinkstack(linkstack top);//把棧置為空棧

status stackempty(linkstack top);//判斷棧是否為空棧

int stacklength(linkstack top);//返回棧的元素個數

selemtype gettop(linkstack top);//取棧頂元素

linkstack push(linkstack top,selemtype e);//插入e為棧頂元素

linkstack pop(linkstack top);//元素出棧

void printstack(linkstack top);//列印棧中元素

int palindrome(linkstack ls,char *ch);//回文判斷

void menu();

#endif // linkstack_h_included

linkstack.cpp

#include"linkstack.h"

using namespace std;

#include#include#include//構造乙個空棧

status initlinkstack(linkstack top)

//銷毀棧,使棧不再存在

status destroylinkstack(linkstack top)

free(top);

printf("destroy is success\n");

}//把棧置為空棧

status clearlinkstack(linkstack top)

while(!stackempty(top))

printf("ok,all the elements are clear\n");

}//判斷棧是否為空棧

status stackempty(linkstack top)

else

}//返回棧的元素個數

int stacklength(linkstack top)

return len;

}//取棧頂元素

selemtype gettop(linkstack top)

//插入e為棧頂元素

linkstack push(linkstack top,selemtype e)

p->data = e;

p->next = top->next;

top->next = p;

//printf("push is success\n");

return top->next;

}//元素出棧

linkstack pop(linkstack top)

node *p;

int x;

p = top->next;

x = p->data;

top->next = p->next;

free(p);

// printf("pop is success,the elements is%d\n",x);

return top->next;

}//列印棧中元素

void printstack(linkstack top)

while(top->next)

}//回文判斷

int palindrome(linkstack ls,char *ch)

if(m % 2 == 1)//m為奇數,跳過中間的字元

i++;

while(i < m)

return 1;

}void menu()

主函式:

#include#include#include#include"linkstack.h"

using namespace std;

int main()

printstack(test);

break;

case 2://輸出棧的長度

if(stackempty(test) == 1)

printf("the stack is empty,length is 0\n");

else

break;

case 3://取棧頂元素

printf("the top element is %d\n",gettop(test));

break;

case 4://元素出棧

pop(test);

break;

case 5://清空鏈棧

clearlinkstack(test);

break;

case 6://銷毀鏈棧

destroylinkstack(test);

break;

case 7://判斷棧是否為空

if(stackempty(test))

printf("the stack is empty\n");

else

printf("the stack is not empty\n");

break;

case 8:

printstack(test);

break;

case 9:

linkstack ls;

char *ch;

int i;

printf("please input the string:");

scanf("%s",ch);

i = palindrome(ls,ch);

if(i!=0)

printf("是回文\n");

else

printf("不是回文\n");

break;

default:

printf("your choice is wrong,please put in(0~9)");

break;

}menu();

scanf("%d",&i);

}return 0;

}

鏈棧及基本操作的實現

include pch.h include include include include 因為棧鏈結點是動態分配的,不考慮棧溢位 typedef struct lnode lnode 棧初始化 帶頭結點 void intistack lnode lst 判斷棧是否為空 int isempty ln...

鏈棧基本操作

棧基本概念 棧 stack 是限定在表尾進行插入和刪除操作的線性表 或單鏈表 只能在一段進行插入和刪除,因此不存在,在中間進行插入 棧頂 top 允許插入和刪除的一端。而另一端稱為棧底 bottom 空棧 不含任何資料元素的棧。後進先出 兩個基本操作 棧的插入操作 push 叫做進棧,或壓棧,或入棧...

鏈棧基本操作

棧 stack 是限定在表尾進行插入和刪除操作的線性表 或單鏈表 只能在一段進行插入和刪除,因此不存在,在中間進行插入 棧頂 top 允許插入和刪除的一端。而另一端稱為棧底 bottom 空棧 不含任何資料元素的棧。後進先出 棧的插入操作 push 叫做進棧,或壓棧,或入棧 刪除操作 pop 叫做出...