#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode, *LinkList;
Status InitList(LinkList &L)
{
//建立一個空的鏈表,L為頭結點指標.
L=(LinkList )malloc(sizeof(LNode)); //生成頭結點
if(!L)
return ERROR;
L->next=NULL;
return OK;
} //InitList
void CircleList(LinkList &L)//將線性鏈表變為回圈鏈表
{
LinkList p;
int i;
p=L;
for(i=0; p->next; i++)
p=p->next;
p->next=L;
}
Status GetElem(LinkList L, int i, ElemType &e)
{
//L為帶頭結點的回圈單鏈表的頭指標.
//當第i個元素存在時,其值賦給e并回傳OK,否則回傳ERROR
LinkList p;
int j;
p =L->next;
j= 1; //初始化,p指向第一個結點,j為計數器
while (p&&j<i)
{
//順指標向后查找,直到p指向第i個元素
p = p->next ;
++j;
}
if (!p||j>i)
return ERROR ; //第i個元素不存在
e =p->data; //取第i個元素
return OK;
} //GetElem
Status ListInsert(LinkList &L, int i, ElemType e)
{
//在帶頭結點的回圈鏈表L中第i個位置之前插入元素e
LinkList p,s;
int j;
p = L;
j = 0;
while (p&&j<i-1)
{
p = p->next; //尋找第i-1個結點
++j;
}
if ( !p||j>i-1)
return ERROR; //i 小于1或者大于表長
s = (LinkList )malloc(sizeof(LNode)); //生成新結點
if(!s)
return ERROR;
s->data = e;
s->next =p->next; //插入L中
p->next=s;
return OK;
}
Status Sort(LinkList L,LinkList &L1,LinkList &L2,LinkList &L3)
{
LinkList p,q;
p=L->next;
int i=1,j=1,k=1;
while(p)
{
if(p->data>='0'&&p->data<='9')
{
//q=p;
ListInsert(L1,i++,p->data);
//free(q);
}
else if((p->data>='a'&&p->data<='z')||(p->data<='A'&&p->data<='Z'))
{
//q=p;
ListInsert(L2,j++,p->data);
//free(q);
}
else
{
//q=p;
ListInsert(L3,k++,p->data);
//free(q);
}
p=p->next;
}
return OK;
}
Status ListLength(LinkList L)
{
//帶頭結點
LinkList p;
int len=0;
p=L->next;
while(p)
{
len++;
p=p->next;
}
return len;
}
void ListPrint(LinkList L)//將鏈表La的資料元素從表頭到表尾依次顯示
{
LinkList p;
int i;
p=L->next;
if(!p)
printf("輸出鏈表失敗!\n");
for(i=0; p; i++)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
LinkList L,L1,L2,L3;
InitList(L);
InitList(L1);//用來放數字
InitList(L2);//用來放字符
InitList(L3);//用來放其他字符
LinkList p,q;
p=L->next;
ElemType e;
int i;
//輸入一個雙向鏈表
for(i=1; i<=5; i++)
{
scanf("%c",&e);
ListInsert(L,i,e);
}
Sort(L,L1,L2,L3);
int len1,len2,len3;
len1=ListLength(L1);
len2=ListLength(L2);
len3=ListLength(L3);
printf("輸出數字:\n");
ListPrint(L1);
printf("輸出字母:\n");
ListPrint(L2);
printf("輸出其他字符:\n");
ListPrint(L3);
CircleList(L1);
CircleList(L2);
CircleList(L3);
return 0;
}
uj5u.com熱心網友回復:
當我輸入12345的時候,它只在字母那里輸出123轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/133113.html
標籤:新手樂園
下一篇:指標陣列
