您的位置:首页 > 编程语言 > C语言/C++

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: