一、mian函数
#include <stdio.h>
#include "./3.looplinklist.h"
int main(int argc, const char *argv[])
{looplinklist* head = create_looplinklist();insertHead_looplinklist(head,100);insertHead_looplinklist(head,200);insertHead_looplinklist(head,300);show_looplinklist(head);insertEnd_looplinklist(head,999);insertEnd_looplinklist(head,888);insertEnd_looplinklist(head,666);show_looplinklist(head);delHead_looplinklist(head);show_looplinklist(head);delEnd_looplinklist(head);show_looplinklist(head);insertByindex_looplinklist(head,2,55555);show_looplinklist(head); insertByindex_looplinklist(head,20,10086);show_looplinklist(head);delByindex_looplinklist(head,4);show_looplinklist(head);delByindex_looplinklist(head,16);show_looplinklist(head);return 0;
}
二、功能函数
#include <stdio.h>
#include <stdlib.h>
#include "./3.looplinklist.h" looplinklist* create_looplinklist()
{ looplinklist* head =(looplinklist*)malloc(sizeof(looplinklist)); if(NULL == head) { printf("头结点创建失败,链表创建失败\n"); return NULL ; } head->text.len = 0; head->next= head; return head;
} //遍历
void show_looplinklist(looplinklist*head)
{ looplinklist*p=head; while(p->next != head) { p=p->next; printf("%d ",p->text.data); } printf("\n"); return ;
} //头插
void insertHead_looplinklist(looplinklist*head,dataType num)
{ looplinklist* temp = (looplinklist*)malloc(sizeof(looplinklist)); if(NULL == temp) { printf("结点创建失败,头插失败\n"); return ; } temp->next = NULL ; temp->text.data = num; temp->next = head->next; head->next = temp; head->text.len++; return ;
} //尾插
void insertEnd_looplinklist(looplinklist*head,dataType num)
{ looplinklist* p =head; while(p->next != head) { p=p->next; } looplinklist* temp = (looplinklist*)malloc(sizeof(looplinklist)); if(NULL == temp) { printf("结点创建失败,尾插失败\n"); return ; } temp->next = NULL ; temp->text.data = num; temp->next = head; p->next = temp; head->text.len++; return ;
} //判空
int isEmpty_looplinklist(looplinklist*head)
{ if(head->next == head) { return 1; } else { return 0; }
} //头删
void delHead_looplinklist(looplinklist*head)
{ if(isEmpty_looplinklist(head)) { printf("链表为空\n"); return ; } looplinklist* temp =head->next; head->next=head->next->next; head->text.len--; free(temp); return;
} //尾删
void delEnd_looplinklist(looplinklist*head)
{ if(isEmpty_looplinklist(head)) { printf("链表为空\n"); return ; } looplinklist*p=head; while(p->next->next != head) { p= p->next; } looplinklist*temp=p->next; p->next = head; head->text.len--; free(temp); return;
} //按位置插入
void insertByindex_looplinklist(looplinklist*head,int index,dataType num)
{ if(index<1) { printf("位置非法,插入失败\n"); return ; } int i=1; looplinklist*p=head; for(i;i<(index%head->text.len);i++) { p=p->next; } looplinklist*temp = (looplinklist*)malloc(sizeof(looplinklist)); if(NULL == temp) { printf("结点申请失败,插入失败\n"); return ; } temp->text.data=num; temp->next=p->next; p->next = temp; head->text.len++; return ;
} //按位置删除
void delByindex_looplinklist(looplinklist*head,int index)
{ if(index<1) { printf("位置非法,删除失败\n"); return ; } if(isEmpty_looplinklist(head)) { printf("链表为空,无法进行删除\n"); return ; } int i=1; looplinklist*p=head; for(i;i<(index%head->text.len);i++) { p=p->next; } looplinklist*temp=p->next; p->next=p->next->next; free(temp); head->text.len--; return;
}
三、头文件
#ifndef __looplink_H__
#define __looplink_H__typedef int dataType;union msg{dataType data;int len;
};typedef struct node{union msg text;struct node* next;
}looplinklist;
looplinklist* create_looplinklist();
void insertHead_looplinklist(looplinklist*head,dataType num);void show_looplinklist(looplinklist*head);
void insertEnd_looplinklist(looplinklist*head,dataType num);
void delHead_looplinklist(looplinklist*head);
void delEnd_looplinklist(looplinklist*head);
void insertByindex_looplinklist(looplinklist*head,int index,dataType num);
void delByindex_looplinklist(looplinklist*head,int index);#endif