int i;
Hnode *q;
node *p;
q=Hhead;
for(i=1;i<m;i++) /*定位至行单链表中的第m个元素*/
q=q->nextl;
p=q->next;/*获取第m个节点的数据域*/
for(i=1;i<n;i++) /*定位至列单链表中的第n个元素*/
p=p->next;
if(p->ch==13) return -1; /*若第m行,第n列的字符为回车键,则返回-1*/
if(p->ch>=32&&p->ch<127) return p->ch; /*若第m行,第n列的字符为常规字符,则返回该字符*/
else return 0; /*若第m行,第n列的字符既非回车符又非常规字符,则返回0*/
}
int judge(Hnode *Hhead,int m) /*judge():返回第m行中的常规字符总的个数,不包括回车符*/
{
Hnode *q;
node *p;
int i,num=0;
q=Hhead;
for(i=1;i<m;i++) /*定位至行单链表中的第m个元素*/
q=q->nextl;
if(q==NULL) return -1; /*返回-1,表示第m行不存在*/
p=q->next;
while(p->next!=NULL)
{
p=p->next;
num++; /*统计第m行的字符个数*/
}
/*行尾字符还没有判断,接下来判断行尾字符*/
if(p->ch==13&&num==0) return 0; /*返回0,表示当前行只有一个回车字符*/
if(p->ch>=32&&p->ch<127) return num+1; /*返回num+1,表示当前行的最后一个字符为常规字符*/
if(p->ch==13&&num!=0) return num; /*返回num,表示当前行的最后一个字符为回车符,不计算在内*/
else return 1;/*返回num,表示当前行中只有一个字符,且没有回车符*/
}
int del(Hnode *Hhead,int m,int n) /*del():删除第m行,第n列位置的字符*/
{
Hnode *q,*q1;
node *p1,*p2,*tail;
int i,num=0,j,flag=0;
q=Hhead;
if(n==0&&m==1) return; /*第1行,第0列不存在*/
if(n==0&&m>1) /*若为第0列字符,但行必须大于1,执行向上行移处理*/
{
n=76;
m=m-1;
gotoxy(n,m);/*移至第m-1行,第76列*/
flag=1; /*移位的标志置1*/
}
for(i=1;i<m;i++) /*定位至行单链表中的第m个元素*/
q=q->nextl;
p1=q->next;
for(i=1;i<n-1;i++) /*定位至列单链表中的第n-1个元素*/
p1=p1->next;
p2=p1->next; /*p2指向列单链表中的第n个元素*/
if(n==1) /*若是删除第m行第1列的字符*/
{
q->next=p1->next;
free(p1);
}
else
{
p1->next=p2->next; /*在单链表中删除第m行第n列的元素*/
free(p2);