数据结构(C&C++)
栈
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50
typedef struct {
int data[MaxSize];
int top;
}SqStack;
void IniStack(SqStack& s) {
s.top = -1; //top指向的是栈顶元素,所以栈空时为-1,也可以让指针top指向下一个将要入栈的元素,小心上溢
}
bool IsEmpty(SqStack s) {
if (s.top == -1)
return true;
else
{
return false;
}
}
bool Push(SqStack& s,int x) {
if (s.top == MaxSize)
return false;
s.data[++s.top] = x;
return true;
}
bool Pop(SqStack& s, int& x) {
if (s.top == -1)
return false;
x = s.data[s.top--];
return true;
}
bool GetTop(SqStack s, int &x) {
if (s.top == -1)
return false;
x = s.data[s.top];
return true;
}
bool Judge(char A[]) {
int i = 0;
int j = 0, k = 0; //j记录I,k记录O;
while (A[i] != '\0') {
switch (A[i]) {
case 'I':j++; break;
case 'O':k++;
if (k > j) {
printf("输入序列非法!\n");
exit(0);
}
}
i++;
}
if (k != j)
{
printf("输入序列非法!\n");
return false;
}
else
{
printf("输入序列合法\n");
return true;
}
}
typedef struct LNode {
char data;
struct LNode* next;
}LNode, * LinkList;
int dc(LinkList L,int n) {
int i;
char s[n / 2]; //栈
LNode *p = L->next;
for (i = 0; i < n / 2; i++) {
s[i] = p->data;
p = p->next;
}
i--;//最后的i需要复原
if (n % 2 == 1)
p = p->next;
while (p != NULL && s[i] == p->data)
{
i--;
p = p->next;
}
if (i == -1)
return 1;
else
{
return 0;
}
}