#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
//关于ElemType:它是element type(“元素的类型”)的简化体。
//可以是任何数据类型,这里是int型
typedef struct Node
{
int data;
struct Node * next;
} Node ;
typedef struct Node* LinkList;
//link:链接 list:目录
void GetElem (LinkList L , int i , int * e)
{
int k ;
LinkList p ;
* e = -1 ;
if(L && i > 0) {
for(k = 1 , p = L ; p -> next && k < i ; k ++ , p = p -> next) ;
if(k == i) * e = p -> data ;
}
}
void ListInsert(LinkList L , int i , int e)
{
int k ;
LinkList p , r ;
if(L && i > 0) {
for(k = 1 , r = L ; r -> next && k < i ; k ++ , r = r -> next) ;
p = (LinkList) malloc(sizeof(Node)) ;
p -> data = r -> data ;
p -> next = r -> next ;
r -> data = e ;
r -> next = p ;
}
}
LinkList ListDelete(LinkList L , int i , int * e)
{
int k ;
LinkList h , p , r ;
* e = -1 ;
h = L ;
if(L && i > 0) {
for(p = r = L , k = 1 ; p -> next && k < i ; r = p , p = p -> next , k ++) ;
if(k == i) {
* e = p -> data ;
if(p == L) h = p -> next ;
else r -> next = p -> next ;
free(p) ;
}
}
return h ;
}
void CreateListHead(LinkList * L , int number)
{
LinkList h , p , r ;
int i ;
for(i = 0 ; i < number ; i ++ )
{
p = (LinkList) malloc(sizeof(Node)) ;
p -> next = NULL ;
scanf("%d" , & p -> data) ;
if(! i) h = p ;
else r -> next = p ;
r = p ;
}
* L = h ;
}
void ShowList(LinkList L)
{
if(L) {
printf("%d" , L -> data) ;
for(L = L -> next ; L ; L = L -> next) printf(" , %d" , L -> data) ;
printf("\n\n") ;
} else {
printf("链表为空。\n") ;
}
}
int main(void)
{
LinkList L ;
int e ;
CreateListHead(& L ,3) ;
ShowList(L) ;
ListInsert(L , 3 , 404) ;
ShowList(L) ;
ListInsert(L , 1 , 808) ;
ShowList(L) ;
L = ListDelete(L , 3 , & e) ;
ShowList(L) ;
L = ListDelete(L , 1 , & e) ;
ShowList(L) ;
}
编译、运行实况:D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
101
202
303
101 , 202 , 303
101 , 202 , 404 , 303
808 , 101 , 202 , 404 , 303
808 , 101 , 404 , 303
101 , 404 , 303
D:\0002.Exercise\C>
|