数据结构,栈和队列常见算法
算法和问题来自于试卷,辅导书,以及网络。
// 数据结构
typedef struct {
int data[Maxsize];
int top;
}Sqstack;
```//顺序栈
typedef struct {
int data[Maxsize];
int front,rear;
}Squeue;
算法3.1.1
假设I,O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,可操作的序列称为合法序列,否则为非法序列,编写算法判定所给操作序列是否合法。
分析:略
bool Func(char s[])
{
int n=0,i=0,j=0;
while(s[n]!='\0')
{
switch(s[n])
{
case 'I':++i;break;
case 'O':++j;
if(j<i) exit(0);
}
n++;
}
if(i!=k) return 0;
else return 1;
}
算法3.1.2
假设单链表表头指针为L,节点由data,next两个域组成,其中data是字符型。编写算法判断改链表的全部n个字符是否中心对称。
分析:略
typedef struct Lnode{
char data;
struct Lnode *next;
}Lnode,*Linklist
bool Func(Linklist L,int n)
{
if(L->next==NULL) return 0;
int stack[n/2],top=-1; //构造栈用于判断是否对称。
Lnode *p=L->next;
while(top<n/2)
{
stack[+&#