標頭檔案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 叫做出...