广义表的问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 20:26:23
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct {
struct GLNode *hp;
struct GLNode *tp;
}Ptr;

typedef struct GLNode{
int tag;
char atom;
Ptr ptr;
}*GLnode,GLNode;

void SubString(char *Sub,char *S,int pos,int len)
{ int i=0;
char ch=' ';
if(pos<1||pos>strlen(S)||len<0||len>strlen(S)-pos+1)
return;
if(!len)
{
*Sub='\0';
}
else
{

for(i=0;i<len;i++)
{
ch=*(S+pos-1+i);
*(Sub+i)=ch;
}
*(Sub+i)='\0';
}
}

void sever(char *str,char *hstr)
{
int n=0;
int i=0;
int k=0;
char ch[1];
n=strlen(str);
do{
++i;
SubString(ch,str,i,1);
if(*ch == '(') ++k;
else if(*ch == ')') --k;
}while(i<n&&

我从其他地方查了一个程序,参考一下:
广义表的扩展线性链表存储(存储结构由c5-6.h定义)的基本操作(13个) */
#include"c4-2.h" /* 定义HString类型 */
#include"bo4-2.c" /* HString类型的基本操作 */
/* 广义表的书写形式串为HString类型 */
Status InitGList(GList *L)
{ /* 创建空的广义表L */
*L=NULL;
return OK;
}

Status sever(HString *str,HString *hstr) /* 同bo5-52.c */
{ /* 将非空串str分割成两部分:hstr为第一个','之前的子串,str为之后的子串 */
int n,i=1,k=0; /* k记尚未配对的左括号个数 */
HString ch,c1,c2,c3;
InitString(&ch); /* 初始化HString类型的变量 */
InitString(&c1);
InitString(&c2);
InitString(&c3);
StrAssign(&c1,",");
StrAssign(&c2,"(");
StrAssign(&c3,")");
n=StrLength(*str);
do
{
SubString(&ch,*str,i,1);
if(!StrCompare(ch,c2))
++k;
else if(!StrCompare(ch,c3))
--k;
++i;
}while(i<=n&&StrCompare(ch,c1)||k!=0);
if(i<=n)
{
StrCopy(&ch,*str);
Su