|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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试试
|
|