程序有误,不知道哪里错了,题目就是一个关于双向链表的打印。
#include
#include
#include
#define MaxSize 5
typedef struct DuLNode
{
char varchar;
struct DuLNode *prior; //前驱指针
struct DuLNode *next; //后驱指针
}DuLNode,*DuLinkList;
DuLinkList InitDuLinkList(DuLNode *H)
{
DuLinkList p,q;
int i,c=0;
for(i=0;imalloc(sizeof(DuLNode));
c++;
if(c==1)
{
q = H = p; //首元结点做头节点
q->prior = NULL;
}
else
{
q->next = p;
p->prior = q;
q = p;
}
}
return H;
}
DuLinkList InputElem(DuLinkList H)
{
int i;
DuLinkList p,q;
p = H;
for(i=0;iprintf("请输入第%d个字符:",i+1);
scanf("%c",&p->varchar);
if(p->next==NULL) q = p; //找到尾节点
p = p->next;
}
return q;
}
void Print(DuLinkList *H,DuLinkList *L)
{
DuLinkList p,q;
char s[2][20];
int i;
p = H;
q = L;
for(i=0;i0][i] = p->varchar;
s[1][i] = q->varchar;
p = p->next;
q = q->prior;
}
printf("顺序打印为:%s\n逆序打印为:%s\n",s[0],s[1]);
if(strcmp(s[0],s[1]) == 0) printf("相等\n");
else printf("不相等\n");
}
int main()
{
DuLNode *H,*L;
H = InitDuLinkList(H); //返回头节点
L = InputElem(H); //返回尾节点
Print(H,L);
return 0;
}
修改处见注释,供参考:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 5
typedef struct DuLNode
{
char varchar;
struct DuLNode *prior; //前驱指针
struct DuLNode *next; //后驱指针
}DuLNode,*DuLinkList;
DuLinkList InitDuLinkList(DuLNode *H)
{
DuLinkList p,q;
int i,c=0;
for(i=0;i<MaxSize;i++)
{
p = (DuLinkList)malloc(sizeof(DuLNode));
c++;
if(c==1)
{
q = H = p; //首元结点做头节点
q->prior = NULL;
}
else
{
q->next = p;
p->prior = q;
q = p;
}
}
return H;
}
DuLinkList InputElem(DuLinkList H)
{
int i;
DuLinkList p,q;
p = H;
for(i=0;i<MaxSize;i++)
{
printf("请输入第%d个字符:",i+1);
scanf(" %c",&p->varchar); // 修改
//scanf("%c",&p->varchar);
if(p->next==NULL) q = p;//找到尾节点
p = p->next;
}
return q;
}
void Print(DuLinkList H,DuLinkList L) // 修改 这里两个形参,不需要二级指针 **
//void Print(DuLinkList *H,DuLinkList *L)
{
DuLinkList p,q;
char s[2][20];
int i;
p = H;
q = L;
for(i=0;i<MaxSize;i++)
{
s[0][i] = p->varchar;
s[1][i] = q->varchar;
p = p->next;
q = q->prior;
}
s[0][i] = '\0';//修改 加上字符串结束符 '\0'
s[1][i] = '\0';
printf("顺序打印为:%s\n逆序打印为:%s\n",s[0],s[1]);
if(strcmp(s[0],s[1]) == 0)
printf("相等\n");
else
printf("不相等\n");
}
int main()
{
DuLNode *H,*L;
H = InitDuLinkList(H);//返回头节点
L = InputElem(H); //返回尾节点
Print(H,L);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 5
typedef struct DuLNode
{
char varchar;
struct DuLNode *prior; //前驱指针
struct DuLNode *next; //后驱指针
}DuLNode,*DuLinkList;
DuLinkList InitDuLinkList(DuLNode *H)
{
DuLinkList p,q;
int i,c=0;
for(i=0;i<MaxSize;i++)
{
p = (DuLinkList)malloc(sizeof(DuLNode));
c++;
if(c==1)
{
q = H = p; //首元结点做头节点
q->prior = NULL;
}
else
{
q->next = p;
p->prior = q;
q = p;
}
}
return H;
}
DuLinkList InputElem(DuLinkList H)
{
int i;
DuLinkList p, q;
p = H;
for(i=0; i<MaxSize; i++)
{
printf("请输入第%d个字符:", i+1);
scanf("%c", &p->varchar);
getchar();
if(p->next == NULL)
q = p; //找到尾节点
p = p->next;
}
return q;
}
void Print(DuLinkList H, DuLinkList L)
{
DuLinkList p, q;
char s[2][20];
int i;
p = H;
q = L;
for(i=0; i < MaxSize; i++)
{
s[0][i] = p->varchar;
s[1][i] = q->varchar;
p = p->next;
q = q->prior;
}
printf("%d %d\n", strlen(s[0]), strlen(s[1]));
printf("顺序打印为: %s\n", s[0]);
printf("逆序打印为: %s\n", s[1]);
if(strcmp(s[0], s[1]) == 0)
printf("相等\n");
else
printf("不相等\n");
}
int main()
{
DuLNode *H, *L;
H = InitDuLinkList(H); //返回头节点
L = InputElem(H); //返回尾节点
Print(H,L);
return 0;
}