循环链表 实现对循环链表的初始化,创建,插入,删除,输出操作
2018-01-12 16:31
956 查看
//循环链表 实现对循环链表的初始化,创建,插入,删除,输出操作 //它只设置尾指针rear,这时头节点为rear->next #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct node{ //定义单链表的节点 int data; struct node *next; }linklist; linklist *head,*rear; //声明一个表头和尾指针 linklist *createlist() //初始化一个循环链表 { head = (linklist*)malloc(sizeof(linklist)); rear=head; rear->next=head; return head; } linklist *createlist(int n) //创建一个循环链表 { linklist *p; head=(linklist*)malloc(sizeof(linklist)); rear=head; rear->next=head; for(int i=1;i<=n;i++) { p=(linklist*)malloc(sizeof(linklist)); scanf("%d",&p->data); p->next=rear->next; rear->next=p; rear=p; } return head; } int insertlist(linklist *head,int i,int x) //在循环链表的i位置处插入元素x { linklist *p,*q; int j=0; p=head->next; while(p!=head) { j++; p=p->next; } p=head; for(int j=1;j<i;j++) p=p->next; if(i>j+1||i<1) { printf("插入位置出错\n"); return -1; } q=(linklist*)malloc(sizeof(linklist)); q->data=x; q->next=p->next; p->next=q; return 0; } int deletelist(linklist *head,int i) //删除位置i处的节点 { linklist *p,*q; p=head->next; int j=0; while(p!=head) { j++; p=p->next; } if(i<1||i>j) { printf("删除位置出错\n"); return -1; } p=head; for(j=1;j<i;j++) p=p->next; q=p->next; p->next=p->next->next; free(q); return 0; } void printlist(linklist *head) //输出循环链表的所有元素 { linklist *p; p=head->next; while(p!=head) { printf(" %d ",p->data); p=p->next; } } int main() { head=createlist(5); //使用createlist(int n)函数 printlist(head); printf("\n"); insertlist(head,6,10); printlist(head); printf("\n"); deletelist(head,6); printlist(head); printf("\n"); /* head=createlist(); //使用createlist()函数 insertlist(head,1,1); insertlist(head,2,3); insertlist(head,3,5); printlist(head);*/ return 0; }
相关文章推荐
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C++版)链表(二)——实现单项循环链表创建、插入、删除等操作
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C++版)链表(二)——实现单项循环链表创建、插入、删除等操作
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- (C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作
- 链表的创建,输出,删除,插入操作。VS2012环境下可执行
- 单向循环链表的创建/插入/删除/输出算法
- 常见算法:C语言中链表的操作(创建,插入,删除,输出)
- 单循环链表-创建、插入、删除、反转等操作
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)