手机
当前位置:查字典教程网 >编程开发 >C语言 >c语言实现单链表算法示例分享
c语言实现单链表算法示例分享
摘要:复制代码代码如下:#include#includetypedefcharDataType;typedefstructNode{DataTyp...

复制代码 代码如下:

#include <stdio.h>

#include <stdlib.h>

typedef char DataType;

typedef struct Node{

DataType data;

struct Node * Next;

}ListNode,* LinkList;

void Judement(LinkList head){ //判断分配内存

if (!head){

printf("Overflow.");

exit(-1);

}

}

LinkList CreatListF(void){ //头插法创建Single Linked List

DataType ch;

LinkList head = (ListNode*)malloc(sizeof(ListNode));

Judement(head);

ListNode* s;

ch = getchar();

while (ch != 'n'){

s = (ListNode*)malloc(sizeof(ListNode));

Judement(s);

s->data = ch;

s->Next = head->Next;

head->Next = s;

ch = getchar();

}

return head;

}

LinkList CreatListS(void){ //尾插法创建Single Linked List

char ch;

ListNode* s;

LinkList head = (ListNode*)malloc(sizeof(ListNode));

Judement(head);

ch = getchar();

while (ch != 'n'){

s = (ListNode*)malloc(sizeof(ListNode));

Judement(s);

s->data = ch;

head->Next = s;

head = s;

ch = getchar();

}

head->Next = NULL;

return head;

}

int GetLength(LinkList head){ //获取长度

int length = 0;

LinkList p = head->Next;

while (p){

length += 1;

p = p->Next;

}

return length;

}

ListNode* GetNodeById(LinkList head, int i){ //依序号查找元素

if (i<1 || i>GetLength(head)){

exit(1);

}

int j=1; //防止极端情况扫描逾界

LinkList p = head->Next;

while (p != NULL && j < i){

j += 1;

p = p->Next;

}

return p;

}

ListNode* GetNodeByValue(LinkList head, DataType e){ //依值查找元素

LinkList p = head->Next;

while (p != NULL&&p->data != e){

p = p->Next;

}

return p;

}

int InsertList(LinkList head, DataType e, int i){ //插入e值在第i节点

if (i<1 || i>GetLength(head) + 1){

exit(1);

}

LinkList s = (ListNode*)malloc(sizeof(ListNode));

s->data = e;

LinkList q, p = head;

int j = 1;

while (j <= i){

q = p;

p = p->Next;

j += 1;

}

s->Next = q->Next;

q->Next = s;

return 0;

}

int DeleteListNodeById(LinkList head, int i){ //依序号删除节点

int j = 1;

ListNode* p,* q;

if (i<1 || i>GetLength(head)){

exit(1);

}

p = head;

while (j < i){

p = p->Next;

j += 1;

}

q = p->Next;

p->Next = q->Next;

free(q);

return 0;

}

int DeleteListRepeatNode(ListNode* head){ //清除冗余数据

ListNode* p, *q, *s;

if (p == NULL){

exit(1);

}

p = head->Next; //首节点无数据

while (p->Next != NULL){

q = p;

while (q->Next != NULL){

if (q->Next->data == p->data){

s = q->Next;

q->Next = q->Next->Next;

free(s);

}

q = q->Next;

}

p = p->Next;

}

return 0;

}

【c语言实现单链表算法示例分享】相关文章:

c语言swap(a,b)值交换的4种实现方法

C语言 扩展欧几里得算法代码

C语言小程序 计算第二天日期示例代码

C语言小程序 数组操作示例代码

c语言内存泄露示例解析

用C++实现单向循环链表的解决方法

C/C++实现矩阵的转置(示例代码)

c语言实现二叉查找树实例方法

c语言 汉诺塔算法代码

用C语言实现单链表的各种操作(一)

精品推荐
分类导航