单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
1.定义节点。
typedef struct LinkNode{
char data;
struct LinkNode *next;
}LNode,*Linklist,*NodePtr;
2.初始化
Linklist initLinklist(){
NodePtr tempHeader=(NodePtr)malloc(sizeof(LNode));
tempHeader->data='\0';
tempHeader->next=NULL;
return tempHeader;
}
3.打印链表
void printlist(NodePtr pheader){
NodePtr p=pheader->next;
while(p){
printf("%c",p->data);
p=p->next;
}
printf("\r\n");
}
4、尾插法
void appendElement(NodePtr paraHeader, char paraChar) {
NodePtr p, q;
q = (NodePtr)malloc(sizeof(LNode));
q->data = paraChar;
q->next = NULL;
p = paraHeader;
while (p->next != NULL) {
p = p->next;
}
p->next = q;
}
5、指定位置插入
void insertElement(NodePtr paraHeader, char paraChar, int paraPosition) {
NodePtr p, q;
p = paraHeader;
for (int i = 0; i < paraPosition; i++) {
p = p->next;
if (p == NULL) {
printf("此位置:%d 在链表中不存在", paraPosition);
return ;
}
}
q = (NodePtr)malloc(sizeof(LNode));
q->data = paraChar;
printf("linking\r\n");
q->next = p->next;
p->next = q;
}
6、指定数据删除
void deleteElement(NodePtr paraHeader, char paraChar) {
NodePtr p, q;
p = paraHeader;
while ((p->next != NULL) && (p->next->data != paraChar)) {
p = p->next;
}
if (p->next == NULL) {
printf("无法找到所需要删除的数据%c\r\n", paraChar);
return;
}
q = p->next;
p->next = p->next->next;
free(q);
}
7、指定数据修改
void change(NodePtr pheader,char Achar,char pchar){
NodePtr p;
p=pheader;
while(p->next!=NULL && p->next->data!=Achar){
p=p->next;
}
if(p->next==NULL){
printf("元素不在链表内.\n");
}
p->next->data=pchar;
}
水平有限,加油冲冲冲