2016年华为认证考试题库
//#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include
typedef struct Node{
intvalue;
Node*next;
}LinkList;
void Converse(LinkList* pPre,LinkList*pCur)
{ //链表逆转
LinkList*p = NULL;
LinkList*pNext = NULL;
p= pPre->next;
LinkList*p1 = NULL;
if(pCur!=NULL)
pNext= pCur->next;
while(p!=pNext)
{
p1= p->next;
p->next= pPre;
pPre= p;
p= p1;
}
}
int main()
{
intcount = 0, k,i=0,j=0,flag = 1,length=0,groups = 0;
scanf("%d",&k);
LinkList*pPre = (LinkList*)malloc(sizeof(LinkList));
LinkList*pCur = (LinkList*)malloc(sizeof(LinkList));
LinkList*pNext = (LinkList*)malloc(sizeof(LinkList));
LinkList*head = NULL;
LinkList* pTempTail = NULL; //指向逆转之后的尾部
LinkList*pTempHead = NULL;
pCur->value= 1;
pPre= pCur; //创建初始链表
for(i=2;i<=6;i++){
LinkList*node = (LinkList*)malloc(sizeof(LinkList));
node->value= i;
pCur->next= node;
pCur= node;
}
pCur->next= NULL;//最后一定要置NULL,c++中用new则无须置NULL
pCur= pPre;
while(pCur!=NULL)
{
length++;
pCur= pCur->next;
}
i=0;
groups= length/k; //分成K段
pCur= pPre;
while(i<=groups)
{
count= 0;
while(count
{
pCur= pCur->next;
count++;
}
if(i
{
pNext= pCur->next;
pTempHead= pCur; /*没做翻转之前的头部,变成了翻转之后的尾部*/
if(flag== 0)
{
pTempTail->next= pTempHead;
}
pTempTail= pPre;
Converse(pPre,pCur);
//pTempTail= pPre;
if(flag==1)
{
head= pCur;
flag= 0;
}
pCur= pNext;
}
else
{
pTempTail->next= pNext;
}
pPre= pCur;
i++;
}
pCur= head;
while(j
j++;
printf("%d",pCur->value);
pCur= pCur->next;
}
printf("\n");
// system("pause");
return0;
}
19. 链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g
#include
#include
#include
typedef struct node{
charval;
structnode* pNext;
}Node;
Node* CreateList(int n);
void Traverslist(Node* pHead);
Node* TransNeighbor(Node* pHead);
int main(){
Node*pHead = CreateList(7);
printf("beforetransform\n");
Traverslist(pHead);
TransNeighbor(pHead);
printf("\naftertransform\n");
Traverslist(pHead);
getchar();
return1;
}
//创建新链表
Node* CreateList(int n){
Node*pHead = (Node*)malloc(sizeof(Node));
Node*pTail = pHead;
pTail->pNext=NULL;
inti;
for(i=0;i < n; i++){
Node* pNew = (Node*)malloc(sizeof(Node));
pNew->val = 'a'+i;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
returnpHead;
}
void Traverslist(Node* pHead){
Node*p = pHead->pNext;
intisFirst = 0;
while(p!=NULL)
{
if(isFirst==0)
{
printf("%c",p->val);
isFirst=1;
}else{
printf("->%c",p->val);
}
p= p->pNext;
}
return;
}
Node* TransNeighbor(Node* pHead){
Node*p = pHead->pNext;
while(p->pNext!=NULL &&p->pNext->pNext!=NULL)
{
charvalue = p->val;
p->val=p->pNext->val;
p->pNext->val=value;
p=p->pNext->pNext;
}
returnpHead;
}
20. 输入一串字符串,其中有普通的字符与括号组成(包括‘(’、‘)’、‘[’,']'),要求验证括号是否匹配,如果匹配则输出0、否则输出1.
#include
#include
//#define MAX 100
int main()
{
chara[100],c[]="(((1+2))";
int i=0,j=0;;
int flag=0;
while(c[i]!=NULL&&flag==0)
{
switch(c[i])
{
case('('):
case('['):
a[j++]=c[i];break;
case(')'):
if(a[j-1]=='(')
{
a[j-1]='\0';
j--;
}
else
flag=1;
break;
case(']'):
if(a[j-1]=='[')
{
a[j-1]='\0';
j--;
}
else
flag=1;
break;
}
i++;
}
if(j!=0) flag=1;
printf("%d\n",flag);
return 0;
}
方法2:#include
#include
#include // !!!分配内存头文件
#define m 20
typedef char ElemType;
typedef struct
{
ElemType stack[m];
int top;
}stacknode;
stacknode *sp;
Init(stacknode *st)
{
st->top=0;
return 0;
}
void Push(stacknode *st,ElemType x)
{
if(st->top==m)
printf("The stack isoverflow!\n");
else
{
st->top=st->top+1;
st->stack[st->top]=x;
}
}
void Pop(stacknode *st)
{
st->top=st->top-1;
}
main()
{
char s[m]="(()";
int i;
printf("Creat astack!\n");
sp = (stacknode*)malloc(sizeof(stacknode)); // !!!添加的语句
Init(sp);
printf("Input aexpression:\n");
// gets(s);
for(i=0;i
{
if(s[i]=='(')
Push(sp,s[i]);
if(s[i]==')')
Pop(sp);
}
if(sp->top==0)
printf("左右括号是匹配的!\n");
else
printf("左右括号是不匹配的!\n");
return 0;
}
21.将第一行中含有第二行中“23”的数输出并排序
2.输入一行数字:123 423 5645 875 186523
在输入第二行:23
将第一行中含有第二行中“23”的数输出并排序
结果即:123 423 186523
#include
#define M 20
int main()
{
int a[M];
int i,j,s,temp;
int sort[M],t=0;
char c=' ';
i=0;
while(c!='\n')
{
scanf("%d%c",&temp,&c);
a[i++]=temp;
}
scanf("%d",&s);
for(j=0;j
{
temp=a[j];
if(temp%100==s)
{
sort[t++]=a[j];
}
else
temp/=10;
}
for(i=0;i
for(j=0;j
{
if(sort[j]>sort[j+1])
{
temp=sort[j+1];
sort[j+1]=sort[j];
sort[j]=temp;
}
}
for(i=0;i
printf("%d",sort[i]);
printf("\n");
return 0;
}
22输入m个字符串 和一个整数n, 把字符串M化成以N为单位的段,不足的位数用0补齐。
如 n=8 m=9 ,
123456789划分为:12345678
90000000
123化为 :12300000
#include
#include
int main()
{
char c[200]={'\0'};
scanf("%s",&c);
int n,i,j;
int len=strlen(c);
scanf("%d",&n);
for(i=1;i<=len;i++)
{
j=i%n;
printf("%c",c[i-1]);
if(j==0)
printf("\n");
}
if(j!=0)
for(i=j+1;i<=n;i++)
更多相关文章推荐阅读: