用c语言指针编程
发布网友
发布时间:2022-03-23 13:42
我来回答
共3个回答
热心网友
时间:2022-03-23 15:12
有点麻烦,试试~~
最近考试有点忙,~
还未通过编译,你自己看着改改,我会尽快再发给你的。~~
1、首先格式化输入到栈,形式为:(字母开始,字母结束,空格分开不同单词,空格不能连续)。
2、构建子栈,步骤:由母栈经格式化(取每个单词后半部到子栈)。
3、排序。
4、输出。
子栈元素首行格式为(堆栈元素 + 指向一数据结构的指针)
#include<ctype.h>
#include<stdio.h>
#define STACK_INT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
#define OK 0
typedef struct C_Node{
char elem;
struct C_Node *next;
}C_Node;
typedef struct C_Stack{
char C_elem;
char *base;
char *top;
C_Node *C_next;
}C_Stack;
typedef struct{
char *base;
char *top;
int stacksize;
}SqStack;
Status InitStack (SqStack &S)
{ S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if (!S.base) exit (OVERFLOW); //存储分配失败
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
Status Push (SqStack &S, char e) {
if (S.top - S.base >= S.stacksize) {//栈满,追加存储空间
S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof (ElemType));
if (!S.base) exit (OVERFLOW); //存储分配失败
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return OK;
}
format_input()
{int Finish=0,flag;
char ch;
while(!Finish)
{flag=0;
scanf("%c",&ch);
if(' '==ch)
else if(isalpha(ch)){
if(0==flag)
else
}
else
}
}
Creat_C_Stack()
{指向 M_Stack 内元素的指针p(用于指向一个单词的最后字母),q(指向p的前方第一个空格元素);
指向 C_Stack 首行元素的指针C_i(),及随后元素的C_i_j(insert_place);
q=M_Stack.top;
p=M_Stack.top;
i=0;
q=top;
p=top-1;
num=0;
while(1)
for(;q.elem!=' ';)
q--;
i=(p-q-1)/2;
Insert_P=C_Stack[num];
Insert_P.elem=p.elem;
p--;
for(j=0;j<i;j--)
Insert_P.next=Insert_P.next;
Insert_P.elem=p.elem;
p--;
if(q==M_Stack) return;
}
Sort()
{C_Stack C_p=C_Stack[j],C_q=C_Stack[j+1],C_Temp;
for(C_p.next!=NULL&&C_q.next!=NULL)
{if(C_p.elem!=C_q.elem){
if(C_p.elem>C_q.elem){
C_temp=C_p;C_q=C_p;C_p=C_temp;
}
else
}
}
}
output()
{for(i=0;i<C_num;i++){
q=C_Stack[i];printf("%c",q.elem);
for(q.next!=NULL){
q=q.next;
printf("%c",q.elem);
}
}
}
#include<stdio.h>
void main()
{printf("只有空格和字母为有效字符,\n");
printf("其他字符将使输入结束。\n");
format_input();
Creat_C_Stack();
Sort();
Output();
}
热心网友
时间:2022-03-23 16:30
//1. 设计一个函数能将一个数组中的最大值和最小值返回给调用者。
//2. 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:①输入10个数;②进行处理;③输出10个数。
#include<stdio.h>
/*fun1 将得到数组的最大值和最小值,通过参数返回给调用者*/
int fun1(int arr[],int len,int *max,int *min)
{
if(len==0)
{
printf("have not data.\n");
return 1;
}
if(max==NULL || min==NULL)
{
printf("pointer error.\n");
return 2;
}
*min=*max=arr[0];
for(int i=1;i<len;i++)
{
if(*min > arr[i])
{
*min=arr[i];
continue;
}
if(*max<arr[i])
{
*max=arr[i];
continue;
}
}
return 0;
}
/*fun2 将输入十个数到数组中 */
void fun2(int arr[])
{
printf("please input 10 numbers:\n");
for(int i=0;i<10;i++)
{
scanf("%d",&arr[i]);
}
}
/* fun3 将数组的最大值放入数组尾部,将最小值放入数组首部*/
void fun3(int arr[], int len)
{
int k_min=0;//记录最小值的位置
int k_max=len-1;//记录最大值的位置
for(int i=1;i<len-1;i++)
{
if(arr[i]<arr[k_min])
{
k_min=i;
continue;
}
if(arr[i]>arr[k_max])
{
k_max=i;
continue;
}
}
// 交换
int tmp;
tmp=arr[0];
arr[0]=arr[k_min];
arr[k_min]=tmp;
tmp=arr[len-1];
arr[len-1]=arr[k_max];
arr[k_max]=tmp;
}
/* fun4 输出数组的内容*/
void fun4(int arr[],int len)
{
printf("********处理后**********\n");
for(int i=0;i<len;i++)
printf("%d ",arr[i]);
printf("\n");
}
/*主函数*/
int main()
{
int arr[10];
int min,max;
min=max=0;
int len=sizeof(arr)/sizeof(int);
//调用函数fun2给数组赋值
fun2(arr);
// 调用fun1获得数组最值
fun1(arr,len,&max,&min);
printf("max=%d,min=%d\n",max,min);
//调用 fun3
fun3(arr,len);
// 调用fun4输出数组
fun4(arr,len);
//getchar();
//getchar();
fflush(stdout);
getchar();
getchar();
return 0;
}
参考资料:给你做参考吧,还是得自己理解为上策
热心网友
时间:2022-03-23 18:04
#include<stdio.h>
#define N 10//数组长度为10!!
void function_name(int *a,int *large,int *small){
*small=*a;
*large=*a;
int i=0;
for(;i<N;i++){
if(a[i]<*small)
*small=a[i];
if(a[i]>*large)
*large=a[i];
}
}
int main(){
int large=0;
int small=0;
int a[N]={2,4,6,7,8,4,0,90,87,54};
function_name(a,&large,&small);
printf("%d,%d",small,large);
}
//帅哥,给个最佳答案吧