1. 程式人生 > >棧的鏈式表示+判斷表示式括號是否配對

棧的鏈式表示+判斷表示式括號是否配對

2018.10.30金庸前輩去世了。飛雪連天射白鹿 笑書神俠倚碧鴛!

武俠泰斗金庸逝世

享年94歲

金庸

原名查良鏞,1924年3月10日生於浙江省海寧市 ,武俠小說作家、新聞學家、企業家、政治評論家、社會活動家。

 金庸夏夢同日去世 夏夢曾是金庸筆下小龍女原型。

鐵桿金庸迷、女作家三毛曾說,“我曾對金庸先生說,你豈只是寫武俠小說呢?你寫的包含了人類最大的,古往今來最不能解決的,使人類可以上天堂也可以下地獄的一個字,也就是‘情’字。”一生痴戀

痴戀夏夢,卻註定無疾而終

說起她,金庸毫不避諱,“西施怎樣美麗誰也沒見過,我想她應該長得像她才名不虛傳。”金庸此話中的她,正是上世紀五六十年代香港長城電影製片公司頭牌女星——夏夢。
  金庸為她一生痴迷,並以她為原型創造了筆下眾多的“金庸女子”,人所共知的如小龍女、王語嫣等。而仔細探究,在金庸的許多作品中,女主角們都留有夏夢的影子,恰這種“恨不相逢未嫁時”的苦楚,也在很大程度上影響了金庸,以及他筆下的江湖。
  更令人唏噓的是,金庸的“夢中情人”夏夢逝於2016年10月30號。而兩年後的10月30日,金大俠竟同日西去。

        不求同生,但求“同死”——也許冥冥之中也印證兩人別樣的深情吧。

https://toutiao.china.com/shsy/gundong4/13000238/20181031/34311323.html

90後好像從去年開始進入了,從鄉愁—余光中先生,HK—Stephen William Hawking,主持人李詠,送別的時代

1listack.cpp即 1++.cpp

#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct linknode
{
	ElemType data;				//資料域
	struct linknode *next;		//指標域
} LiStack;						//鏈棧型別定義
void InitStack(LiStack *&s)
{
	s=(LiStack *)malloc(sizeof(LiStack));
	s->next=NULL;
}
void DestroyStack(LiStack *&s)
{
	LiStack *pre=s,*p=s->next;
	while(p!=NULL){
        free(pre);
        pre=p;
        p=pre->next;
	}
	free(pre);
}
/*
void DestroyStack(LiStack *&s)
{
	LiStack *p=s->next;
	while (p!=NULL)
	{
		free(s);
		s=p;
		p=p->next;
	}
	free(s);	//s指向尾結點,釋放其空間
}
*/
int StackLength(LiStack *s)
{
	int i=0;
	LiStack *p;
	p=s->next;
	while (p!=NULL)
	{
		i++;
		p=p->next;
	}
	return(i);
}
bool StackEmpty(LiStack *s)
{
	return(s->next==NULL);
}
void Push(LiStack *&s,ElemType e)
{	LiStack *p;
	p=(LiStack *)malloc(sizeof(LiStack));
	p->data=e;				//新建元素e對應的節點*p
	p->next=s->next;		//插入*p節點作為開始節點
	s->next=p;
}
bool Pop(LiStack *&s,ElemType &e)
{	LiStack *p;
	if (s->next==NULL)		//棧空的情況
		return false;
	p=s->next;				//p指向開始節點
	e=p->data;
	s->next=p->next;		//刪除*p節點
	free(p);				//釋放*p節點
	return true;
}
bool GetTop(LiStack *s,ElemType &e)
{	if (s->next==NULL)		//棧空的情況
		return false;
	e=s->next->data;
	return true;
}

2 exam3-5-2.cpp

#include "1++.cpp"
#include <string.h>
bool Match(char exp[],int n)
{
	int i=0; char e;
	bool match=true;
	LiStack *st;
	InitStack(st);						//初始化棧
	while (i<n && match)				//掃描exp中所有字元
	{
		if (exp[i]=='(')				//當前字元為左括號,將其進棧
			Push(st,exp[i]);
		else if (exp[i]==')')			//當前字元為右括號
		{
			if (GetTop(st,e)==true)
			{
				if (e!='(')				//棧頂元素不為'('時表示不匹配
					match=false;
				else
					Pop(st,e);			//將棧頂元素出棧
			}
			else  match=false;			//無法取棧頂元素時表示不匹配
		}
		i++;							//繼續處理其他字元
	}
	if (!StackEmpty(st))				//棧不空時表示不匹配
		match=false;
	DestroyStack(st);					//銷燬棧
	return match;
}

int main()
{
	char exp[]="(1+2*(5+3)/2)";
	if (Match(exp,strlen(exp))==1)
		printf("表示式%s括號配對\n",exp);
	else
		printf("表示式%s括號不配對\n",exp);
    return 0;
}