C语言单链表操作基础
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(NODE)
typedef struct _NODE//节点声明
{
int val;
struct _NODE* next;
} NODE, *PNODE;
void print(PNODE head){//打印所有节点
while (head)
{
printf("%3d",head->val);
head = head->next;
}
printf("\n");
}
void insertHead(PNODE *pHead, int val){//头插法
PNODE n = (PNODE)malloc(LEN);
n->val = val;
n->next = *pHead;
*pHead = n;
}
void insertTail(PNODE *pHead, int val){//尾插法
PNODE t = *pHead;
PNODE n = (PNODE)malloc(LEN);
n->val = val;
n->next = NULL;
if (*pHead == NULL)
{
n->next = *pHead;
*pHead = n;
}else{
while (t->next)
{
t = t->next;
}
t->next = n;
}
}
void deleteHead(PNODE *pHead){//删除头
if (*pHead == NULL)
{
return;
}
else
{
PNODE t = *pHead;
*pHead = (*pHead)->next;
free(t);
}
}
void deleteTail(PNODE *pHead){//删除尾
PNODE t = *pHead;
if (t == NULL)
{
return;
}
else if (t->next == NULL)
{
free(t);
*pHead = NULL;
}
else{
while (t->next->next != NULL)
{
t = t->next;
}
free(t->next);
t->next = NULL;
}
}
PNODE findByVal(PNODE head, int val){//根据值找到满足条件的第一个节点
while (head != NULL && head->val != val)
{
head = head->next;
}
return head;
}
PNODE findByIndex(PNODE head, int index){//根据索引找节点
if (index == 1)
{
return head;
}
else
{
int c = 1;
while (head != NULL && index != c)
{
head = head->next;
c++;
}
}
return head;
}
void insertByIndex(PNODE *pHead, int index, int val){//根据索引插入节点
if (index == 1)
{
insertHead(pHead, val);
}
else
{
PNODE t = findByIndex(*pHead,index - 1);
if (t == NULL)
{
return;
}
else
{
PNODE n = t->next;
t->next = (PNODE)malloc(LEN);
t->next->next = n;
t->next->val = val;
}
}
}
void deleteByIndex(PNODE *pHead, int index)//根据结点索引删除结点
{
if (index == 1)
{
deleteHead(pHead);
}
else
{
PNODE t= findByIndex(*pHead, index - 1);
if (t == NULL || t->next == NULL)
{
return;
}else{
PNODE n = t->next->next;
free(t->next);
t->next = n;
}
}
}
void deleteByVal(PNODE *pHead, int val)//根据值删掉第一个满足条件的
{
if (*pHead == NULL)//如果空表退出
{
return;
}
else
{
if ((*pHead)->val == val)//如果第一个就是,删头
{
deleteHead(pHead);
}
else
{
PNODE t = *pHead;
while (t->next != NULL && t->next->val != val)//遍历,若t的next为空或者next是要找的节点则退出
{
t = t->next;
}
if (t->next)//如果t指向要找的结点的上一个节点
{
PNODE n = t->next->next;//删除要找的结点
free(t->next);
t->next = n;
}
}
}
}
void clear(PNODE *pHead)//清除链表
{
while ((*pHead) != NULL)
{
deleteHead(pHead);//从头删除
}
}
void main()
{
PNODE head = NULL;
insertTail(&head,1);
deleteHead(&head);
insertTail(&head,2);
insertTail(&head,3);
insertTail(&head,4);
insertTail(&head,5);
insertTail(&head,6);
print(head);
insertByIndex(&head, 6, 9);
print(head);
//deleteByIndex(&head,3);
deleteByVal(&head, 2);
print(head);
clear(&head);
print(head);
insertByIndex(&head,1,12);
print(head);
}
分享到:
相关推荐
C语言单链表的基本操作(包括单链表的定义、初始化、添加、删除等操作)
C语言单链表基本操作大全
C语言实现单链表的所有基本操作,500行左右,键盘输入
C语言 单链表的基本操作(创建插入,删除,排序,逆置,释放,打印).pdfC语言 单链表的基本操作(创建插入,删除,排序,逆置,释放,打印).pdf
定义了单链表的基本操作,并在主函数中测试了所有定义的操作。
C语言 数据结构里面的,循环单链表的简单操作
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
单链表基本操作 基于C语言实现单链表的基本操作
C单链表的基本操作
每敲一次代码都会有新的收获,基本功不扎实啥也干不了。单向链表的插入,删除,创建,遍历是数据结构的基本操作。里边的算法值得学习。下面我们就来学习一下单向链表结点的逐个删除的方法。
平时数据结构的实验作业,用c语言编写的单链表的基本操作,初始化,清空,查找,删除,添加等。。用c-free或vc6.0通过。
C语言实现单链表(带头结点)的基本操作 C语言实现单链表(带头结点)的基本操作 C语言实现单链表(带头结点)的基本操作 C语言实现单链表(带头结点)的基本操作
用户可以通过主菜单选择不同的操作,包括录入顾客信息、搜索菜品、结算账单、录入菜品、搜索订单等。 基本要求包括: ① 顾客信息录入:用户可以输入桌号、人数以及特殊需求,并将其保存在系统中。 ② 菜品搜索:...
c语言数据结构的, 学数据结构一定会用到的 。
单链表操作 [基本要求] (1)建立带表头结点的单链表; (2)输出单链表中所有结点的数据域值; (3)输入x,y在第一个数据域值为x的结点之后插入结点y,若无结点x,则在表尾插入结点y; (4)输入k,删除单链表中所有...
C语言实现单链表(带头结点)的基本操作
主要介绍了C语言实现单链表逆序与逆序输出,是数据结构与算法中比较基础的重要内容,有必要加以牢固掌握,需要的朋友可以参考下
头歌数据结构单链表的基本操作 第1关单链表的插入操作 第2关单链表的删除操作 第3关单链表的按照序号查找值操作 第4关单链表的按照值查找结点位序的操作 第5关单链表的逆置操作 第6关两个有序单链表的合并操作 稳过 ...