单链表的储存方法:
单链表C语言实现:
#include <cstddef>
#include <stdio.h>
#include <stdlib.h>
typedef int DataType; //定义线性表的数据类型,假设为int型
typedef struct Node
{
DataType data;
struct Note* next; //定义指针域
}Node;
Node* first;
//初始化
Node* InitList()
{
Node* first = (Node*)malloc(sizeof(Node));
first->next = NULL;
return first;
}
//判空
int Empty(Node* first)
{
if (first->next == NULL)
return 1;
else
return 0;
}
//遍历
void PrintList(Node* first)
{
Node* p = first->next;
while (p != NULL)
{
printf("%d ", p->data);
p->next;
}
}
//链表长度
int LengthList(Node* first)
{
Node* p = first->next;
int count = 0;
while (p != NULL)
{
count++;
p = p->next;
}
return count;
}
/*按位查找
* 输入:元素序号i
* 功能:在表中取序号为i的数据元素
* 输出:若i合法,输出序号为i的元素值
*/
int Get(Node* first, int i, DataType* prt)
{
Node* p = first->next;
int count = 1;
while (p != NULL && count < i)
{
count++;
p = p->next; //工作指针p后移
}
if (p == NULL || count > i)
{
printf("位置错误,查找失败\n");
return 0;
}
else
{
*prt = p->data;
return 1;
}
}
/*按值查找
* 输入:要查找的元素值x
* 功能:在表中取元素值为x的数据元素
* 输出:输出元素值为x的序号
*/
int Locate(Node* first, DataType x)
{
Node* p = first->next;
int count = 1;
while (p != NULL)
{
if (p->data == x)
{
return count;
}
count++;
p = p->next;
}
return 0; //退出循环表明查找失败
}
/*插入
* 输入:插入位置i,待插x
* 功能:在表的第i位置插入一个新元素x
* 输出:若插入成功返回1,若插入失败返回0并且显示错误信息
*/
int Insert(Node* first, int i, DataType x)
{
Node* p = first, *s = NULL;
int count = 0;
while (p != NULL && count < i - 1)
{
p = p->next;
count++;
}
if (p = NULL || count > i - 1)
{
printf("位置错误,插入失败\n");
return 0;
}
else
{
s = (Node*)malloc(sizeof(Node));
s->data = x;
s->next = p->next;
p->next=s;
return 1;
}
}
/*删除
* 输入:要删除元素的位置i
* 功能:删除表中第i个元素
* 输出:若删除成功返回1并且显示删除元素的值,若删除失败返回0并且显示错误信息
*/
int Delete(Node* first, int i,DataType *prt)
{
Node* p = first,*q=NULL;
int count = 0;
while (p!=NULL && count < i - 1)
{
p=p->next;
count++;
}
if (p == NULL ||p->next==NULL|| count > i - 1)
{
printf("位置错误,删除失败\n");
return 0;
}
else
{
q = p->next;
*prt = q->data;
p->next= q->next;
free(q);
print("被删除的元素:%d", *prt);
return 1;
}
}
//单链表的建立
Node* CreatList(DataType a[], int n)
{
Node* s = NULL;
Node* first = (Node*)malloc(sizeof(Node));
first->next = NULL;
for (int i = 0;i < n;i++)
{
s = (Node*)malloc(sizeof(Node));
s->data = a[i];
s->next = first->next;
first->next = s;
}
return first;
}