user-0 提问: 顺序表和单链表执行出来结果 完全相反 求教为什么n。。

回复:
user: user-1
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  #define OK 1 #define ERROR  0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 50  typedef int Status; // 函数的类型 其值是函数结果状态代码，如OK等 typedef char ElemType; // 数据元素类型 根据实际情况而定 这里假设为int  struct LNode /* 结点定义 */ {     ElemType data;     struct LNode *next; }; typedef struct LNode *LinkList; /* 表的头指针类型 */   Status ListEmpty(LinkList L) // 判断是否为空表 {     if(L->next)         return TRUE;     else         return FALSE; };  Status ListLength(LinkList L) // 求表的长度 {     int count = 0;     LinkList p = L;     while(p)     {         p = p->next;         count++;     }      return count; };   Status GetElem(LinkList L, int i, ElemType *e) // 取表中一个元素 {     int j = 1; // j 为计数器     LinkList p = L;     while(p && j < i) // 顺指针向后查找，直到p指向第i个元素或者p为空     {         p = p->next;         j++;     }     if(! p||j > i) // 第i个元素不存在         return ERROR;     *e = p->data; // 取第i个元素     return OK; };  Status equal(ElemType e1, ElemType e2) // 满足关系equal的数据元素的位序 {     if(e1 == e2)         return TRUE;     else         return FALSE; };  Status LocateElem (LinkList L, ElemType e,Status (*equal)(ElemType, ElemType)) // 判断表L中符合位序的元素 {     LinkList p = L;     int i = 1;     while(p)     {         if(equal(p->data, e))             return 1;         i++;         p = p->next;     }     return 0; };  void ListInsert(LinkList L, int i, ElemType e) // 插入一个元素 {     int j = 1;     LinkList p, q;     p = L;     while(p&&j < i-1) // 寻找第i-1个结点     {         p = p->next;         ++j;     }     q = (LinkList )malloc(sizeof(struct LNode)); // 生成新结点     q->data = e; // 插入L中     p->next = q;     q->next = NULL; };  void Union(LinkList *La, LinkList Lb) // 共用体 { // 将所有在表Lb中但不在La中的数据元素插入到La中 //     ElemType e;     int La_len, Lb_len;     int i;     La_len = ListLength(*La); // 求La的长度 //     Lb_len = ListLength(Lb);     printf("la = %d, lb = %d\n", La_len, Lb_len);     for(i=1; i<=Lb_len; i++)     {         GetElem(Lb, i, &e); // 取Lb中的第i个元素赋给e //         if(!LocateElem(*La, e, equal)) // La中不存在和e相同的元素 则插入 //             ListInsert(*La, ++La_len, e); // 插入元素 //     } };  LinkList creat() {     int i = 0;   //note initize     LinkList p, q, head = NULL;     p = q = head = (LinkList)malloc(sizeof(struct LNode));     printf("Please input the L:\n");     scanf("%c",&p->data);     while(p->data != '\n')     {         i = i + 1;         if(i == 1)             head = p;         else             q->next = p;         q = p;         p = (LinkList)malloc(sizeof(struct LNode));         scanf("%c",&p->data);     }     q->next = NULL;     return (head); }   void print(LinkList head) {     LinkList p = head;     while(p)     {         //printf("%s", p->data);         printf("%c", p->data);         p = p->next;     }     putchar(10); }  int main() {     LinkList Lahead, Lbhead, p;      Lahead = creat();     Lbhead = creat();     print(Lahead);     print(Lbhead);      Union(&Lahead, Lbhead);      for(p = Lahead; p->next!=NULL; p = p->next)         printf("%c" ,p->data);     printf("%c\n",p->data); } 参考一下吧  对比一下找一下自己的问题。

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  #define OK 1 #define ERROR  0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 50  typedef int Status; // 函数的类型 其值是函数结果状态代码，如OK等 typedef char ElemType; // 数据元素类型 根据实际情况而定 这里假设为int  typedef struct {     ElemType data[MAXSIZE];     int length; }SqList;  Status ListEmpty(SqList L) // 判断是否为空表 {     if(L.length == 0)         return TRUE;     else         return FALSE; }  Status ListLength(SqList L) // 求表的长度 {     int len;     len = strlen(L.data);     L.length = len;      return len; }   Status GetElem(SqList L, int i, ElemType *e) // 取表中一个元素 {     *e = L.data[i-1];      return OK; }  Status equal(ElemType e1, ElemType e2) // 满足关系equal的数据元素的位序 {     if(e1 == e2)         return TRUE;      return FALSE; }  Status LocateElem (SqList L, ElemType e,Status (*compare)(ElemType, ElemType)) // 判断表L中符合位序的元素 {     int j;     int flag;     for(j=0; j<L.length; j++)   //既然j是从0开始，那么下面是不是将j-1改成j呢，否则会越界。     {         if((flag = compare(L.data[j], e)) != FALSE)    //这儿的compare为什么没用，还有需要加一个括号在这。             return TRUE;     }     return FALSE; }  void ListInsert(SqList *L, int i, ElemType e) // 插入一个元素 {     L->length = i;     L->data[i-1] = e;     L->data[i] = '\0'; }  void Union(SqList *La, SqList Lb) // 共用体 { // 将所有在表Lb中但不在La中的数据元素插入到La中 //     ElemType e;     int La_len, Lb_len;     int i;     La_len = ListLength(*La); // 求La的长度 //     Lb_len = ListLength(Lb);     La->length = La_len;     Lb.length = Lb_len;      for(i=1; i<=Lb_len; i++)     {         GetElem(Lb, i, &e); // 取Lb中的第i个元素赋给e //         if(!LocateElem(*La, e, equal)) // La中不存在和e相同的元素 则插入 //             ListInsert(La, ++La_len, e); // 插入元素 //     } };  int main() // 主函数 {     SqList La, Lb;     printf("Please input the La:\n");     gets(La.data);     printf("Please input the Lb:\n");     gets(Lb.data);      //ListEmpty(La);     //ListEmpty(Lb);     Union(&La,Lb);      printf("The final L is La:\n");     printf("%s\n",La.data);     return 0; } 参考一下吧

user: user-0
content: 说错了  是在 “  LocateElem  ”函数

user: user-0
content: 把链表的 j=0 改为了 j=1 之后就和顺序表一样了    现在链表也是 输出12341了   但是那个1是怎么来的呢？ 怎么能把那个1弄掉了  是开始读入数据错了吗？