2015年安徽省C++语言版高级
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
} listnode; typedef listnode* linklist; /*--------------------------------------------*/ /* 删除单链表中重复的结点 */ /*--------------------------------------------*/ linklist deletelist(linklist head) { listnode *p,*s,*q; p=head->next; while(p) {s=p; q=p->next; while(q) if(q->data==p->data) {s->next=q->next;free(q); q=s->next;} else { s=q; /*找与 P 结点值相同的结点*/ q=q->next; } p=p->next; } return head; }
1、假设以 I 和 O 分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列 可表示为仅由 I 和 O 组成的序列,称可以操作的序列为合法序列,否则称为非法序列。 (15 分) (1)A 和 D 是合法序列,B 和 C 是非法序列。 (2)设被判定的操作序列已存入一维数组 A 中。 int Judge(char A[]) //判断字符数组 A 中的输入输出序列是否是合法序列。如是,返回 true,否则返回 false。 {i=0; //i 为下标。 j=k=0; //j 和 k 分别为 I 和字母 O 的的个数。 while(A[i]!=‘\0’) //当未到字符数组尾就作。 {switch(A[i]) {case‘I’: j++; break; //入栈次数增 1。 case‘O’: k++; if(k>j){printf(“序列非法\n”);exit(0);} } i++; //不论 A[i]是‘I’或‘O’ ,指针 i 均后移。} if(j!=k) {printf(“序列非法\n”);return(false);} else {printf(“序列合法\n”);return(true);} }//算法结束。 2、#define maxsize 栈空间容量 void InOutS(int s[maxsize]) //s 是元素为整数的栈,本算法进行入栈和退栈操作。 {int top=0; Hale Waihona Puke Baidu/top 为栈顶指针,定义 top=0 时为栈空。 for(i=1; i<=n; i++) //n 个整数序列作处理。 {scanf(“%d”,&x); //从键盘读入整数序列。 if(x!=-1) // 读入的整数不等于-1 时入栈。 if(top==maxsize-1){printf(“栈满\n”);exit(0);} else s[++top]=x; //x 入栈。 else //读入的整数等于-1 时退栈。 {if(top==0){printf(“栈空\n”);exit(0);} else printf(“出栈元素是%d\n”,s[top--]);} } }//算法结 3、有一个带头结点的单链表,每个结点包括两个域,一个是整型域 info,另一个是指向下 一个结点的指针域 next。假设单链表已建立,设计算法删除单链表中所有重复出现的结点, 使得 info 域相等的结点只保留一个。 #include <stdio.h> typedef char datatype; typedef struct node{ datatype data; struct node * next;