3.概要设计: 1)逻辑结构:栈 2)程序结构设计:包括以下函数 ①主函数 main() ②CreateList(LinkList &L,int n) ③judge(LinkList L, int n) ④Push(SqStack &S,SElemType e) ⑤InitStack(SqStack &S) ⑥Pop(SqStack &S,SElemType &e)
时间: 2024-03-10 19:51:24 浏览: 114
3. 概要设计:
1) 逻辑结构:栈
2) 程序结构设计:
① 主函数 main()
② CreateList(LinkList &L, int n):创建含n个节点的链表L,并随机生成n个字符。
③ judge(LinkList L, int n):判断L中的字符是否中心对称,是则返回true,否则返回false。
④ Push(SqStack &S, SElemType e):将元素e压入栈S中。
⑤ InitStack(SqStack &S):初始化栈S。
⑥ Pop(SqStack &S, SElemType &e):从栈S中弹出一个元素,并将其存入e中。
具体实现如下:
```
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
#define MAXSIZE 100
typedef char SElemType;
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
} SqStack;
typedef struct LNode{
char data;
struct LNode *next;
} LNode, *LinkList;
int InitStack(SqStack &S){
S.base = new SElemType[MAXSIZE];
S.top = S.base;
S.stacksize = MAXSIZE;
return 1;
}
int Push(SqStack &S, SElemType e){
if(S.top - S.base == S.stacksize){
return 0;
}
*S.top++ = e;
return 1;
}
int Pop(SqStack &S, SElemType &e){
if(S.top == S.base){
return 0;
}
e = *--S.top;
return 1;
}
void CreateList(LinkList &L, int n){
LNode *p, *q;
L = new LNode;
L->next = NULL;
q = L;
srand((unsigned)time(NULL));
for(int i = 0; i < n; i++){
p = new LNode;
p->data = rand() % 26 + 'a';
q->next = p;
q = p;
}
q->next = NULL;
}
bool judge(LinkList L, int n){
SqStack S;
SElemType e;
InitStack(S);
LNode *p = L->next;
for(int i = 0; i < n/2; i++){
Push(S, p->data);
p = p->next;
}
if(n % 2 != 0){
p = p->next;
}
while(p != NULL && Pop(S, e) && e == p->data){
p = p->next;
}
if(S.top == S.base){
return true;
}
else{
return false;
}
}
int main(){
LinkList L;
int n;
cout << "请输入链表的长度:";
cin >> n;
CreateList(L, n);
if(judge(L, n)){
cout << "该字符串中心对称" << endl;
}
else{
cout << "该字符串不中心对称" << endl;
}
return 0;
}
```
阅读全文