首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于链表输出的有关问题-输出乱码或不能输出全部

2012-02-23 
关于链表输出的问题-输出乱码或不能输出全部各位牛哥大家好,有问题请教!这个链表输入中文,可是输入一组之

关于链表输出的问题-输出乱码或不能输出全部
各位牛哥大家好,有问题请教!
这个链表输入中文,可是输入一组之后,就结束了。想办法解决输入问题之后,可是输出 的是乱码!在下实在不知其解,特请教各位!!
万分感谢!
#include<string.h>
 #include<ctype.h>
 #include<malloc.h> /* malloc()等 */
 #include<limits.h> /* INT_MAX等 */
 #include<stdio.h> /* EOF(=^Z或F6),NULL */
 #include<stdlib.h> /* atoi() */
 #include<io.h> /* eof() */
 #include<math.h> /* floor(),ceil(),abs() */
 #include<process.h> /* exit() */
 /* 函数结果状态代码 */
 #define TRUE 1
 #define FALSE 0
 #define OK 1
 #define ERROR 0
 #define INFEASIBLE -1
 /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
 typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
 typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
typedef char ElemType;
#define LIST_INIT_SIZE 50 /* 线性表存储空间的初始分配量 */
 #define LISTINCREMENT 20 /* 线性表存储空间的分配增量 */
 typedef struct LNode
 {
  ElemType data;
  struct LNode *next;
 }*LinkList;
 

 Status InitList(LinkList *L)
 { /* 操作结果:构造一个空的线性表L */
  *L=(LinkList)malloc(sizeof(struct LNode)); /* 产生头结点,并使L指向此头结点 */
  if(!*L) /* 存储分配失败 */
  exit(OVERFLOW);
  (*L)->next=NULL; /* 指针域为空 */
  return OK; }
 
Status ListInsert(LinkList L,int i,ElemType e) /* 算法2.9。不改变L */
 { /* 在带头结点的单链线性表L中第i个位置之前插入元素e */
  int j=0;
  LinkList p=L,s;
  while(p&&j<i-1) /* 寻找第i-1个结点 */
  {
  p=p->next;
  j++;
  }
  if(!p||j>i-1) /* i小于1或者大于表长 */
  return ERROR;
  s=(LinkList)malloc(sizeof(struct LNode)); /* 生成新结点 */
  s->data=e; /* 插入L中 */
  s->next=p->next;
  p->next=s;
  return OK;
 }

Status ListOutput(LinkList L)
{ /* 初始条件:线性表L已存在 */
  //将线性表L中所有元素在屏幕中输出
  LinkList p=L->next;
  while(p)
  {
  printf("%c",p->data); // 元素在屏幕中输出 d
  p=p->next; //指向下一个结点
  }
  printf("\n");
  return OK; 
}
 
Status DestroyList(LinkList *L)
 { /* 初始条件:线性表L已存在。操作结果:销毁线性表L */
  LinkList q;
  while(*L)
  { q=(*L)->next;
  free(*L);
  *L=q; }
  return OK; }


void main( )
{LinkList L;
ElemType e[30]; //定义数组
 int j;
// char ch;
 InitList(&L);
 for(j=1;j<=5;j++)
 {printf("请输入数据:");
scanf("%c",&e[30]); 
 // ch=getchar();
ListInsert(L,j,e[30]);
}
ListOutput(L);
printf("输出完毕,表将销毁");
  DestroyList (&L);
}//我自己想问题是不是少了某个头文件,可是找不到是哪个!

[解决办法]
中文占用两个字符,而插入函数用的是一个字符
[解决办法]
汉字在大多数平台下都是占用两个字节的(当然,也有例外)
scanf("%c",&e[30]);
===================
e[30]?什么意思?ElemType e[30];//这是e[0:29]啊;另外定义成数组有特殊含义吗?
直接ElemType e;不久行吗?

//ch=getchar(); 
===================
这的确是必要的,用以"吃掉"回车符,为什么要注释掉?另外此处返回值没有用处.大可以直接getchar();

其余的....楼主再试一试吧...

热点排行