double aver(double *arra, int n)
{
int i
double sum = 0, aver = 0
for(i = 0i <ni++)
{
sum+= arra[i]
}
aver = sum / n
return aver
}
double max(double *arra, int n)
{
int i
double max = 0
for(i = 0i <ni++)
{
if(arra[i] >max)
{
max = arra[i]
}
}
return max
}
double min(double *arra, int n)
{
int i
double min = 65535
for(i = 0i <ni++)
{
if(arra[i] <min)
{
min = arra[i]
}
}
return min
}
void main()
{
double hw[2][10] = {{167,168,169,170,171,172,173,174,175,176},{58,59,60,61,62,63,64,65,66,67}}
double h[10],w[10]
int i
for(i = 0i <10i ++)
{
h[i] = hw[0][i]
w[i] = hw[1][i]
}
printf("他们的平均身高为:%.1f\n", aver(h,10))
printf("他们的平均体重为:%.1f\n", aver(w,10))
printf("他们的最大身高为:%.1f\n", max(h,10))
printf("他们的最大体重为:%.1f\n", max(w,10))
printf("他们的最小身高为:%.1f\n", min(h,10))
printf("他们的最小体重为:%.1f\n", min(w,10))
}
采用链栈实现算法,代码如下:
#include"stdio.h"
#include"stdlib.h"
typedef char ElemType
typedef struct stnode
{
ElemType data
struct stnode *next
}StNode, *LinkStack
int huiwen(char str[])
{
int i = 0
char ch
StNode *sl = NULL, *p
while ((ch = str[i++]) != '\0')
{
p = (StNode *)malloc(sizeof(StNode))
p->data = ch
p->next = sl
sl = p
}
i = 0
while (sl != NULL)
{
p = sl
ch = p->data
sl = sl->next
free(p)
if (ch != str[i++])
return 0
}
return 1
}
void main()
{
char string[20]
int hw
printf("input a string:")
gets_s(string)
hw = huiwen(string)
if (hw) printf("The string is HUIWEN.")
else printf("The string is not HUIWEN.")
}
扩展资料
栈的特点是先进后出,而链表中的头插法正好满足我们的需求,因为头插法后面插入的节点位于链表的开头,所以我们可以使用头插法来插入节点,在弹出节点的时候弹出链表的第一个节点即可,而第一个节点是很容易找出来的,所以可以很轻松地实现栈的压入和弹出操作。
栈是一种是一种实现数据“先进后出”的存储结构,分为静态栈和动态栈,静态栈就是以数组的方式存储数据,动态栈是以链表的方式存储数据;对栈的操作算法,常用的就是压栈和出。
栈的创建:
在创建一个数据结构之前,必须知道这种数据结构由哪些参数组成,栈的本质既然是个链表,它必然由很多节点组成;为了实现“先进后出”这种数据结构,我们需要引进两个参数,一个是栈顶指针(pTop),始终指向栈顶元素。一个参数是栈底指针(pBottom),始终指向栈底元素。
我们知道为了方便描述链表的各种操作,引进了头节点的概念,即为每个链表前面加一个头节点,但并存放有效数据;同样,为了实现栈的操作,我们同样需要一个不存放任何有效数据的节点,并且栈底指针始终指向该节点。