| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 582 人关注过本帖
标题:讨论--怎样能使程序循环呢(关于单链表)蛮有意思的。。。
取消只看楼主 加入收藏
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
讨论--怎样能使程序循环呢(关于单链表)蛮有意思的。。。
#include<stdio.h>
#include <stdlib.h>
#define null 0


typedef struct node
{
     char data;
     struct node *next;
}lnode;


lnode *create()
{
   lnode *head,*tail,*p;
   char x;

   head=(lnode *)malloc(sizeof(lnode));
   tail=head;

   x=getchar();
   while(x!='$')
   {
      p=(lnode *)malloc(sizeof(lnode));
      p->data=x;
      tail->next=p;
      tail=p;
      x=getchar();
   }

   tail->next=null;

   return head;
}
void Insert(lnode *p,char x)
{
    lnode *s=(lnode *)malloc(sizeof (lnode));
    s->data=x;
    s->next=p->next;
    p->next=s;
}

void Delete(lnode *h,char x)
{
    lnode *q,*p=h;
    while(p&&p->next)
        if(p->next->data==x)
        {
            q=p->next;
            p->next=q->next;
            free(q);
        }
        else
            p=p->next;
}


lnode *nizhi(lnode *h)
{
  lnode *back,*p,*front;

  back=null;
  p=h->next;
  h->next=null;

  while(p!=null)
  {
     front=p->next;
     p->next=back;
     back=p;
     p=front;
  }

  h->next=back;

  return h;
}

void print(lnode *h)
{
   lnode *p=h->next;

   while(p)
   {
      printf("%c ",p->data);
      p=p->next;
      }
   
}

void main()
{
    lnode *x,*y;
    int a,b,c;
    printf("请输入字符串\n");
    x=create();
    printf("请选择您需要的功能:\t0---逆置\t1---插入\t2---删除");
    a=getchar();
    a=getchar();
    switch(a)
    {
    case '0':
            x=nizhi(x);
            print(x);
            printf("\n");
            getchar();
            break;
    case '1':
            printf("请输入将要插入的字母:");
            c=getchar();
            c=getchar();
            Insert(x,c);
            print(x);
            printf("\n");
            getchar();
            break;
    case '2':
            printf("请输入将要删除的字母:");
            b=getchar();
            b=getchar();
            Delete(x,b);
            printf("\n");
            getchar();
            break;

    }

printf("请选择\t0---逆置\t1---插入\t2---删除");
getchar();

   
   
}


我想实现继续选择,怎么办呢???
有一个想法----想将switch单独设个函数,但不知道怎么实现。。。。
谁知道呢??
讨论一下。。。

搜索更多相关主题的帖子: include return create null 
2011-11-11 21:56
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
有没有人呢,留个爪呀。。。
讨论讨论嘛。。。
2011-11-11 22:01
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
留个爪嘛。。。
2011-11-11 22:07
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
都没有人理我。。。。
2011-11-11 22:09
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
回复 5楼 Toomj
我已经根据你的程序改了,可是还是不行。。。你在帮我看看错哪里了
#include<stdio.h>
#include <stdlib.h>
#define null 0


typedef struct node
{
     char data;
     struct node *next;
}lnode;


lnode *create()
{
   lnode *head,*tail,*p;
   char x;

   head=(lnode *)malloc(sizeof(lnode));
   tail=head;

   x=getchar();
   while(x!='$')
   {
      p=(lnode *)malloc(sizeof(lnode));
      p->data=x;
      tail->next=p;
      tail=p;
      x=getchar();
   }

   tail->next=null;

   return head;
}
void Insert(lnode *p,char x)
{
    lnode *s=(lnode *)malloc(sizeof (lnode));
    s->data=x;
    s->next=p->next;
    p->next=s;
}

void Delete(lnode *h,char x)
{
    lnode *q,*p=h;
    while(p&&p->next)
        if(p->next->data==x)
        {
            q=p->next;
            p->next=q->next;
            free(q);
        }
        else
            p=p->next;
}


lnode *nizhi(lnode *h)
{
  lnode *back,*p,*front;

  back=null;
  p=h->next;
  h->next=null;

  while(p!=null)
  {
     front=p->next;
     p->next=back;
     back=p;
     p=front;
  }

  h->next=back;

  return h;
}

void print(lnode *h)
{
   lnode *p=h->next;

   while(p)
   {
      printf("%c ",p->data);
      p=p->next;
      }
   
}

void main()
{
    lnode *x,*y;
    int a,b,c;
    printf("请输入字符串\n");
    x=create();
    printf("请选择您需要的功能:\n0---退出\t1---逆置\t2---插入\t3---删除");
    a=getchar();
    a=getchar();
    while(a)
    {
        switch(a)
        {
        case '1':
            x=nizhi(x);
            print(x);
            printf("\n");
            getchar();
            break;
        case '2':
            printf("请输入将要插入的字母:");
            c=getchar();
            c=getchar();
            Insert(x,c);
            print(x);
            printf("\n");
            getchar();
            break;
        case '3':
            printf("请输入将要删除的字母:");
            b=getchar();
            b=getchar();
            Delete(x,b);
            print(x);
            printf("\n");
            getchar();
            break;
   
        }

    printf("请继续选择\t0---退出\t1---逆置\t2---插入\t3---删除");
    scanf("%d",&a);
    }

   
   
}
只显示。。。却不实现。。。
拜托你了。。。

2011-11-12 15:54
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
回复 7楼 Toomj
主函数必须是int型吗??
我用void就不行
2011-11-12 16:53
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
可以了。。。谢谢。。。


2011-11-12 17:06
快速回复:讨论--怎样能使程序循环呢(关于单链表)蛮有意思的。。。
数据加载中...
 
   



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

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