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);}

原创粉丝点击