用链表的形式存储一个字符串 按正序和逆序输出字符串(数据结构考试)

 我来答
zhjiemm
2012-04-17 · TA获得超过2643个赞
知道大有可为答主
回答量:1834
采纳率:75%
帮助的人:746万
展开全部

这个字符串的输出,考虑到有正序和逆序,采用链表,可以考虑用双链表。这样输出效率会比较高。

建议用循环双链表(带头结点),方便程序处理,简化操作流程,步骤明晰,便于调试。

关键函数可分为:

1,结构的定义

2,初始化链表

3,输出(正序,逆序)

4,释放链表

5,主函数

以下C语言代码在VC6.0中编译通过:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <malloc.h>

#include <string.h>

/*定义*/

typedef struct node

{

  char c;

  struct node *llink,*rlink;

}stud;

/*建立链表*/

stud * creat(void)

{

  stud *p,*h,*s;

  char a;

  if((h=(stud *)malloc(sizeof(stud)))==NULL)

  {

    printf("不能分配内存空间!");

    exit(0);

  }

  h->c = 0;

  h->llink=NULL;

  h->rlink=NULL;

  p=h;

  while(1)

  {

a = getchar();

if(a=='\n')

break;

    if((s= (stud *) malloc(sizeof(stud)))==NULL)

    {

      printf("不能分配内存空间!");

      exit(0);

    }

    p->rlink=s;

    

    s->c =a;

    s->llink=p;

    s->rlink=NULL;

    p=s;

  }

  h->llink=s;

  p->rlink=h;

  return(h);

}

/*正序*/

void print1(stud *h)

{

  stud *p;

  p=h->rlink;

  printf("字符串(正序):");

  while(p!=h)

  {

    printf("%c",p->c);

    p=p->rlink;

  }

  printf("\n");

}

/*逆序*/

void print2(stud *h)

{

  stud *p;

  p=h->llink;

  printf("字符串(逆序):");

  while(p!=h)

  {

    printf("%c",p->c);

    p=p->llink;

  }

  printf("\n");

}

/*释放*/

void free_stud(stud *h)

{

  stud *p,*q;

  p=h->llink;

  while(p!=h)

  {

    q=p;

    p=p->llink;

    free(q);

  }

  free(h);

}

/*主函数*/

int main()

{

  stud *head=NULL;

  head=creat();

  print1(head);

  print2(head);

  free_stud(head);

  return 0;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式