单循环链表基本操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*1、CreateList( ):创建一个带头结点的空的单循环链表;
2、InsertList( ):输入一组数据,以0表示输入结束, 并依次建立各个元素结点,逐个插入到单循环链表尾
3、DeleteList( ):删除单循环链表的从第i个数据元素开始的m个数据元素,同时释放被删结点空间
4. ListPrint( ):将单向循环链表的数据元素从表头到表尾依次显示
5. DevList( ):将此单循环链表拆分成两个单循环链表,其中一个包含所有的数据元素为偶数的结点,
另一个包含所有的数据元素为奇数的结点.*/
#include
#include
typedef struct node{
int data;
struct node *next;
}LNode,*linklist;
void createlist(linklist &L)
{linklist p=L;
p->next=p;
}
void insertlist(linklist &L)
{int x;
linklist p=L,q;
scanf("%d",&x);
while(x!=0)
{q=(linklist)malloc(sizeof(LNode));
q->data=x;q->next=NULL;
p->next=q;
p=q;
scanf("%d",&x);
}
q->next=L;
}
void printlist(linklist L)
{linklist p=L->next ;
if(p==L)printf("这是一个空表!\n");
while(p!=L){printf("%2d",p->data);p=p->next;}
printf("\n");
}
void deletelist(linklist &L,int i,int m)
{linklist p=L,q;
for(int n=1;n
{p=p->next;
if(p==L)p=p->next;
}
q=p->next;
for(n=0;n if(q!=L) {p->next=q->next; free(q); q=p->next; } else {q=q->next; L->next=q->next; free(q); q=L->next; p=L; } } void devlist(linklist L,linklist &La,linklist &Lb) {linklist p=L->next,pa=La,pb=Lb,q; while(p!=L) { if((p->data)%2==0) {q=(linklist)malloc(sizeof(LNode)); q->data=p->data; pa->next=q; pa=q; } else {q=(linklist)malloc(sizeof(LNode)); q->data=p->data; pb->next=q; pb=q; } p=p->next; } pa->next=La; pb->next=Lb; } void main() {//int i,m; linklist L,La,Lb; L=(linklist)malloc(sizeof(LNode)); La=(linklist)malloc(sizeof(LNode)); Lb=(linklist)malloc(sizeof(LNode)); createlist(L); printf("请输入一组数据, 并以0表示输入结束:\n"); insertlist(L); printf("单循环链表的数据元素从表头到表尾依次为:\n"); printlist(L); /*printf("\n请分别输入i、m的值:\n"); scanf("%d%d",&i,&m); deletelist(L,i,m); printf("删除操作后的单循环链表的数据元素从表头到表尾依次为:\n"); printlist(L);*/ devlist(L,La,Lb); printf("拆分后,单循环链表a的数据元素从表头到表尾依次为:\n"); printlist(La); printf("拆分后,单循环链表b的数据元素从表头到表尾依次为:\n"); printlist(Lb); }