C语言链表的各项操作
来源:互联网 发布:安徽太和县网络电视台 编辑:程序博客网 时间:2024/04/30 00:46
#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);}