| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1986 人关注过本帖
标题:这题就很怪!
只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
我也来一个数据结构的简单练习~

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define WORD_MAX  20
#define LENGTH_MAX 100  

#define LEN_Stack sizeof(Stack)
#define LEN_LinkStack sizeof (LinkStack)

typedef struct Stack
{
    char s[WORD_MAX];
    struct Stack* next;
}Stack,*PStack;

typedef struct LinkStack
{
    PStack base;
    PStack top;
}LinkStack,*PLinkStack;

PLinkStack Creat_Stack();                     //创建一个栈
void Push_Stack(PLinkStack stack,char a[]);   //入栈
void Pop_Stack(PLinkStack stack);             //出栈
int Empty_Stack(PLinkStack stack);            //判断栈空
void Destory_Stack(PLinkStack stack);         //销毁栈

int main()
{
    PLinkStack stack=Creat_Stack();

    char a[LENGTH_MAX*WORD_MAX]={0};
    char *p=NULL;
    char *buf=a;

    printf("请输入句子:");
    scanf("%[^\n]%*c",a);

    while ((p=strtok(buf," "))!=NULL)
    {
        Push_Stack(stack,p);
        buf=NULL;
    }

    if (!Empty_Stack(stack))
    {
        printf("%s",stack->top->s);
        Pop_Stack(stack);
    }

    while (!Empty_Stack(stack))
    {
        printf(" %s",stack->top->s);
        Pop_Stack(stack);
    }
    puts("");

    Destory_Stack(stack);
    free(stack);
    stack=NULL;

    return 0;
}

PLinkStack Creat_Stack()   //创建一个栈
{
    PLinkStack stack=(PLinkStack)malloc(LEN_LinkStack);

    if (stack==NULL)
    {
        puts("创建出错!");
        exit(0);
    }

    stack->top=stack->base=(PStack)malloc(LEN_Stack);

    if (stack->base==NULL)
    {
        puts("创建出错");
        exit(0);
    }

    memset(stack->top,0,LEN_LinkStack);

    return stack;
}

void Push_Stack(PLinkStack stack,char a[])   //入栈  
{
    PStack p=(PStack)malloc(LEN_Stack);

    if (p==NULL)
    {
        puts("创建出错");
        exit(0);
    }

    p->next=stack->top;
    strcpy(p->s,a);
    stack->top=p;
}

void Pop_Stack(PLinkStack stack)
{
    if (Empty_Stack(stack))
        return ;

    stack->top=stack->top->next;
}

int Empty_Stack(PLinkStack stack)           //判断栈空
{
    return stack->base==stack->top;
}

void Destory_Stack(PLinkStack stack)         //销毁栈
{
    PStack p=NULL;
    while (!Empty_Stack(stack))
    {
        p=stack->top->next;
        free(stack->top);
        stack->top=p;
    }
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-21 00:22
小烧饼
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-12-17
收藏
得分:0 
回复 30楼 ehszt
可以
2017-03-21 07:05
小烧饼
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-12-17
收藏
得分:0 
回复 31楼 九转星河
虽然不懂,还是谢啦
2017-03-21 07:05
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:0 
程序代码:
#include <stdio.h>

int main(void)
{
    char str[10000];
    printf("enter str: ");
    gets(str);

    int i = 0;
    for (; str[i] != '\0'; i++)//得到输入的字符串长度
        ;

    for (int j; ; i--)
    {
        if (str[i] == ' '&&str[i + 1] != ' '&&str[i + 1] != '\0')
        {
            for (j = i + 1; str[j] != ' '&&str[j] != '\0'; j++)
                printf("%c", str[j]);
            printf(" ");
        }
        if (i == 0) 
        {
            if (str[i] != ' ')
                for (j = i; str[j] != ' '; j++)
                    printf("%c", str[j]);
            break;
        }
    }

    return 0;
}


虽然实现了,但是不优美
2017-03-21 10:52
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 34楼 yanzy
哈哈~没关系啦~优化代码这能力要慢慢加强的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-21 10:57
快速回复:这题就很怪!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046342 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved