马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
双向循环列表总是多输出一个T,求各位大佬帮忙看一下是哪里出错了,谢谢各位大佬!#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef struct{
char value;
}ElementType;
typedef struct Node
{
Node *prev,*next;
ElementType data;
}LNode,*LinkList;
typedef short Status; //状态值,1表示正确,<=0表示各种错误
Status CreateLinkList(LinkList &L) //创建循环双向链表,正确返回1,否则返回错误值,调用后需要根据返回值进行相应操作
{
LinkList p = NULL,q = NULL;
int j = 1;
L = (LinkList)malloc(sizeof(LNode));
if(L == NULL)
{
printf("内存申请失败");
return ERROR;
}
L->prev = L;
L->next = L;
return OK;
}
Status IsEmpty(LinkList &L) //判断传入的是否是空链表(我们对于空链表的定义是只存在头结点的链表)
{
if(L->prev==L&&L->next==L)
{
return OK;
}
else
return ERROR;
}
Status InsertDataAtTail(LinkList &L,ElementType e) //每次从链表最后位置插入元素e
{
LinkList p=NULL,q=NULL;
p=L;
while(1)
{
if(p->next==L)
break;
p=p->next;
}
q=(LinkList)malloc(sizeof(LNode));
if(q==NULL)
{
printf("插入元素失败!");
return ERROR;
}
q->data=e;
q->prev=p;
q->next=p->next;
p->next=q;
p=q;
p->next=L;
L->prev=p;
return OK;
}
Status DeleteDataFromList(LinkList &L,char e) //从链表中删除指定的元素
{
LinkList p=NULL;
int i=1;
p=L;
while(1)
{
p = p->next;
if(p->data.value==e)
{
break;
}
if(p->next==L)
{
printf("元素不存在");
return ERROR;
break;
}
}
p->next->prev=p->prev;
p->prev->next=p->next;
return OK;
}
Status SeparateList(LinkList &L)//将数字与英文字符分割为两个双向循环列表
{
LinkList p=NULL,num=NULL,cha=NULL;
LinkList L_num=NULL,L_char=NULL;
CreateLinkList(L_num);
CreateLinkList(L_char);
p=L->next;
while(p!=L)
{
if(p->data.value>=48&&p->data.value<=57)
{
InsertDataAtTail(L_num,p->data);
}
else
{
InsertDataAtTail(L_char,p->data);
}
p=p->next;
}
if(IsEmpty(L_num)==1)
{
printf("没有数字\n");
}
else
{
printf("数字双向链表的内容是:\n");
num=L_num->next;
while(1)
{
printf("%c",num->data.value);
num=num->next;
if(num==L_num)
break;
}
printf("\n");
}
if(IsEmpty(L_char)==1)
{
printf("没有字符\n");
}
else
{
printf("字符双向链表的内容是:\n");
cha=L_char->next;
while(1)
{
printf("%c",cha->data.value);
cha=cha->next;
if(cha==L_char)
break;
}
printf("\n");
}
return OK;
}
int main()
{
LinkList L=NULL;
int number,i;
ElementType e;
if(CreateLinkList(L)==1)//创建双向循环列表
printf("双向循环链表创建成功!\n");
printf("输入列表长度,以回车符结束。\n");
scanf("%d",&number);
getchar();//删去输入的回车
printf("请输入单个数字或英文字符:\n");
for(i=1;i<=number;++i)
{
printf("请输入第%d个数据(总数%d):\n",i,number);
scanf("%c",&e.value);
getchar();
InsertDataAtTail(L,e); //尾插法插入输入的元素
}
for(i=1;i<=number;++i)
{
L=L->next;
printf("%c",L->data.value);
}printf("\n");
SeparateList(L);
return 0;
}
我这里没有T啊
你在编译选项里加上-std=c99试试
|