| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 582 人关注过本帖
标题:讨论--怎样能使程序循环呢(关于单链表)蛮有意思的。。。
只看楼主 加入收藏
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
讨论--怎样能使程序循环呢(关于单链表)蛮有意思的。。。
#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
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:15 
main函数里设个循环就好了,下面是我写的:
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
    char data;
    struct node* next;
}Node,*LinkList;

LinkList CreateList();
void ListInsert(LinkList& L);
void ElemDelete(LinkList& L);
void OutList(LinkList L);

int main()
{
    int a;
    printf("------------------------------\n");
    printf("*****链表*****\n");
    printf("  1.创建.\n");
    printf("  2.插入\n");
    printf("  3.删除节点.\n");
    printf("  4.打印链表.\n");
    printf("  0.退出.\n");
    printf("------------------------------\n");
    printf("\n请选择(0~4):");
    scanf("%d",&a);
    while(a)
    {
        switch(a)
        {
        case 1:
            LinkList L;
            L=CreateList();
            break;
        case 2:
            ListInsert(L);
            break;
        case 3:
            ElemDelete(L);
            break;
        case 4:
            OutList(L);
            break;       
        }
        printf("\n请选择(0~4):");
        scanf("%d",&a);
    }
    return 0;
}

LinkList CreateList()
{//构造链表,输入数据并以'#'结束
    LinkList L=(Node*)malloc(sizeof(Node));
    Node *p,*rear=L;
    char ch;
    printf("构造链表,输入数据并以'#'结束 \n");
    printf("请输入节点数据('#'结束):");
    _flushall();
    scanf("%c",&ch);
    while(ch!='#')
    {
        p=(Node*)malloc(sizeof(Node));
        p->data=ch;
        rear->next=p;
        rear=p;
        printf("请输入节点数据('#'结束):");
        _flushall();
        scanf("%c",&ch);
    }
    rear->next=NULL;
    return L;
}

void ListInsert(LinkList& L)
{//在第i个位置后插入e
    printf("在第i个位置后插入新数据e\n请输入i和e: ");
    int i;
    char e;
    scanf("%d %c",&i,&e);
    Node *p,*q;
    p=L;
    q=(Node*)malloc(sizeof(Node));
    q->data=e;
    while(i--)
        p=p->next;
    q->next=p->next;
    p->next=q;
}

void ElemDelete(LinkList& L)
{//删除第i个位置的值
    printf("删除第i个位置的节点\n请输入i:");
    int i;
    scanf("%d",&i);
    Node *p,*q;
    p=L;
    while(i-->1)
        p=p->next;
    q=p->next;
    p->next=q->next;
    printf("删除的是:%c",q->data);
    free(q);
}

void OutList(LinkList L)
{//输出链表
    printf("输出链表: ");
    Node *p;
    p=L->next;
    while(p)
    {   
        printf("%c",p->data);
        p=p->next;
    }
    printf("\n");
}

2011-11-11 23:19
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
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:3 
你的a是int型的,干嘛你用getchar();而且case后面还是字符型‘1’。。。
程序代码:
#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;
      }
  
}

int main()
{
    lnode *x,*y;
    int a,b,c;
    printf("请输入字符串\n");
    x=create();
    printf("请选择您需要的功能:\n0---退出\t1---逆置\t2---插入\t3---删除");
    scanf("%d",&a);
    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);
    }
    return 0;   
}


如果你想用字符型的话,把a改为char型,switch()语句里再加个
case '0':exit(0);
2011-11-12 16:32
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
回复 7楼 Toomj
主函数必须是int型吗??
我用void就不行
2011-11-12 16:53
Sv少
Rank: 3Rank: 3
来 自:山东青岛
等 级:论坛游侠
威 望:1
帖 子:53
专家分:168
注 册:2011-11-7
收藏
得分:2 
根据ASCII码对照表,你输入的0 1 2 3分别对应48 49 50 51;
你或者改动源程序直接变为 scanf("%d",&a);并将数字的单引号去掉
 或者输入48 49 50 51;

Sv少  run
2011-11-12 16:54
Angel乖乖
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2011-5-14
收藏
得分:0 
可以了。。。谢谢。。。


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



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

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