C语言链表的各项操作
2012-12-03 01:06
302 查看
#include <stdio.h> typedef char data; typedef struct Node List; struct Node { data r[100]; struct Node *next; }; int length=0; //链表长度 void ListInit(List *L) { L=(List*)malloc(sizeof(List)); L->next=NULL; length=0; } int ListInsert(List *L,int i,List *node) { List *current; int j=1; current=L; if(i>length+1||i<0) return 0; while(j++<i) { current=current->next; } node->next=current->next; current->next=node; length++; return 1; } List* ListSearch(List L,int i) { int j=1; List *current=L.next; if(i<0||i>length+1) return NULL; while(j++<i) { current=current->next; } return current; } int ListUpdate(List *L,int i,List *node) { int j=1; List *current=L; if(i<0||i>length+1) return 0; while(j++<i) { current=current->next; } node->next=current->next->next; free(current->next); current->next=node; return 1; } int ListDelete(List *L ,int i) { int j=1; List *current=L; if(i<0||i>length+1) return 0; while(j++<i) { current=current->next; } current->next=current->next->next; length--; return 1; } void ListDisplay(List L) { List *current=L.next; int index=1; printf("链表长度: %d\n",length); while(index<=length) { printf("%d :%s\n",index++,current->r); current=current->next; } } int ListClear(List *L) { List *current=L->next; List *temp; int index=1; while(index++<=length) { temp=current->next; free(current); current=temp; } length=0; return 1; } void main() { List L,*node; int i=0; int index=0; ListInit(&L); for(i=1;i<=4;i++) { node=(List*)malloc(sizeof(List)); scanf("%s",node->r); ListInsert(&L,i,node); } ListDisplay(L); printf("输入要删除的节点:"); scanf("%d",&index); ListDelete(&L,index); ListDisplay(L); node=(List*)malloc(sizeof(List)); printf("输入要插入节点的数据:"); scanf("%s",node->r); printf("输入要插入节点的位置:"); scanf("%d",&index); ListInsert(&L,index,node); ListDisplay(L); printf("输入要修改节点的位置:"); scanf("%d",&index); node=(List*)malloc(sizeof(List)); printf("输入要修改节点的数据:"); scanf("%s",node->r); ListUpdate(&L,index,node); ListDisplay(L); printf("输入要查找节点的位置:"); scanf("%d",&index); node=ListSearch(L,index); printf("该节点的值为:%s\n",node->r); printf("链表清空\n"); ListClear(&L); }
相关文章推荐
- C语言----链表的各项操作总结----单项循环链表
- C语言---关于链表的各项操作总结-----单向链表
- C语言---关于链表的各项操作总结-----单向链表
- C语言----链表的各项操作-----双向链表
- C语言-----链表的各项操作总结------双向循环链表
- C语言-----链表的各项操作总结------双向循环链表
- c语言链表基本操作
- C语言--链表基本操作(课时5)
- C语言实现链表的基本操作
- 数据结构5: 链表(单链表)的基本操作及C语言实现
- C语言链表操作模板(添加,删除,遍历,排序)
- 链表基本操作的C语言简单实现
- 转贴:C语言链表基本操作
- C语言实现链表的创建、增加、删除、查询、逆序、清空等基本操作
- [原]C语言实现双向链表删除节点、插入节点、双向输出等操作
- 单链表的基本操作大全之C语言实现(一)
- C语言 链表的基本操作实现 源码
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 经典面试题---单链表的基本操作(C语言实现)
- C语言链表各类操作详解