同时使用一个栈和一个队列
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
4:
5:
/*将char类型定义为ElemType*/
7:
/*定义队列结点类*/
9: ElemType data;
struct QNode *next;
11: } QNode , *QueuePtr;
12:
/*定义一个链队列*/
/*队头指针*/
/*队尾指针*/
16: } LinkQueue;
17:
/*定义一个栈类型*/
19: ElemType *base;
20: ElemType *top;
int stacksize;
22: } sqStack;
23:
24:
void initQueue(LinkQueue *q) {
/*初始化一个空队列*/
/*创建一个头结点,队头队尾指针 指向该结点*/
28:
/*创建头结点失败*/
30:
/*头结点指针域置NULL*/
32: }
33:
/*入队列操作*/
35: QueuePtr p;
/*创建一个队列元素结点*/
37:
/*创建头结点失败*/
39:
/*将元素e入队列*/
/*修改队尾指针*/
42: q->rear ->next = p;
43: q->rear = p;
44: }
45:
void DeQueue(LinkQueue *q, ElemType *e) {
/*如果队列q不为空,删除q的队头元素,用e返回其值*/
48: QueuePtr p;
49:
/*队列为空,返回*/
51:
52: p = q->front->next;
53: *e = p->data;
54: q->front->next = p->next;
55:
/*如果队头就是队尾,则修改队尾指针*/
57:
58: free(p);
59: }
60:
void initStack(sqStack *s)
62: {
/*内存中开辟一段连续空间作为栈空间,首地址赋值给s->base*/
sizeof(ElemType));
65:
/*分配空间失败*/
67:
/*最开始,栈顶就是栈底*/
/*最大容量为STACK_INIT_SIZE */
70: }
71:
/*入栈操作*/
if(s->top - s->base >= s->stacksize) {
/*栈满,追加空间*/
75: s->base = (ElemType *)realloc(s->base, (s->stacksize +
sizeof(ElemType));
77:
/*存储分配失败*/
79:
80: s->top = s->base + s->stacksize;
/*设置栈的最大容量*/
82: }
83:
/*放入数据*/
85: s->top++;
86: }
87:
/*出栈操作*/
/*将栈顶元素弹出*/
90:
/*修改栈顶指针*/
92: }
93:
/*获得栈s的大小*/
return (s.top - s.base) ;
96: }
97:
98:
int main()
100: {
101: sqStack s;
102: LinkQueue q;
103: ElemType e, r1, r2;
int flag = 1, i, len;
105:
/*初始化一个队列*/
/*初始化一个栈*/
);
, &e);
110:
/*输入待判断的字符序列*/
112: Push(&s, e);
113: EnQueue(&q, e);
, &e);
115: }
116:
/*获得字符序列的长度*/
118:
for(i = 0; i < len; i++)
120: {
/*出栈操作,由r1将栈顶元素返回*/
/*出队列操作,由r2将队头元素返回*/
123:
if(r1 != r2) {
125: flag = 0;
break;
127: }
128: }
129:
);
) ;
132:
return 0;
134:
135: }
136: