下面是用c语言实现的单链表的一些基本操作:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct LNode 5 { 6 int elem; 7 struct LNode *next; 8 }LNode, *LinkList; 9 10 /*单链表得初始化*/ 11 LinkList CreatList() 12 { 13 LinkList p = (LNode *) malloc(sizeof(LNode)); //定义一个头节点 14 LinkList temp = p; //声明一个指针指向头节点 15 16 for(int i=1;i<=5;i++) 17 { 18 LinkList q = (LNode *) malloc(sizeof(LNode)); 19 q->elem = i; 20 q->next = NULL; 21 temp->next = q; 22 temp = q; 23 } 24 25 return p; 26 } 27 28 /*单链表的插入*/ 29 LinkList InsertElem(LinkList &L, int e, int pos) 30 { 31 LinkList temp = L; 32 /*首先要找到插入节点的上一个节点*/ 33 for(int i=1;i<pos;i++) 34 { 35 if(temp == NULL) 36 { 37 printf("插入位置无效!"); 38 return L; 39 } 40 temp = temp->next; 41 } 42 43 LinkList p = (LNode *)malloc(sizeof(LNode)); 44 p->elem = e; 45 p->next = temp->next; 46 temp->next = p; 47 48 return L; 49 } 50 51 /*单链表的指定位置元素删除*/ 52 LinkList DelElem(LinkList &L, int e) 53 { 54 LinkList temp = L; 55 /*先找到要被删除的上一个节点*/ 56 for(int i=1; i < e; i++) 57 { 58 temp = temp->next; 59 if(temp == NULL) 60 { 61 printf("删除的位置无效!\n"); 62 return L; 63 } 64 } 65 66 LinkList del = temp->next; 67 temp->next = del->next; 68 free(del); 69 return L; 70 } 71 72 /*单链表的查找*/ 73 int selectElem(LinkList L, int e) 74 { 75 LinkList temp = L; 76 int i = 1; 77 while(temp->next!=NULL) 78 { 79 temp = temp->next; 80 if(temp->elem == e) 81 return i; 82 i++; 83 } 84 85 return -1; 86 } 87 88 /*单链表的指定位置修改*/ 89 LinkList ModifyElem(LinkList &L, int pos, int e) 90 { 91 LinkList temp = L; 92 /*先找到下标为pos的节点*/ 93 for(int i=1;i<=pos;i++) 94 { 95 temp = temp->next; 96 if(temp == NULL) 97 printf("位置信息无效!"); 98 } 99 100 temp->elem = e; 101 return L; 102 } 103 /*单链表的输出*/ 104 void display(LinkList L) 105 { 106 LinkList temp = L; 107 while(temp->next!=NULL) 108 { 109 temp = temp->next; 110 printf("%d->",temp->elem); 111 } 112 printf("NULL\n"); 113 } 114 115 int main() 116 { 117 printf("初始化链表为:\n"); 118 LinkList L; 119 L = CreatList(); 120 display(L); 121 122 printf("\n在第4个位置插入元素100:\n"); 123 L = InsertElem(L, 100, 4); 124 display(L); 125 126 printf("\n删除第3个位置的元素:\n"); 127 L = DelElem(L, 3); 128 display(L); 129 130 printf("\n查找元素100的下标:\n"); 131 int pos = selectElem(L, 100); 132 133 if(pos == -1) 134 { 135 printf("没有查到该元素!\n"); 136 } 137 else 138 printf("位置下标为:%d\n", pos); 139 140 printf("\n将下标为4的元素更改为1000\n"); 141 L = ModifyElem(L, 4, 1000); 142 display(L); 143 system("pause"); 144 return 0; 145 }