单向链表的实现
C语言实现单向链表是利用结构体作为节点,结构体指针传递地址
#include<iostream>
#include <cstdlib>
#include <string>
typedef struct Node
{
int data; //数据域
struct Node* next; //指针域,指向下一个结点
}Node;
typedef struct Node LNode; //定义结构体数据类型LNode
typedef struct Node* LinkList; //定义结构体指针数据类型LinkList
using namespace std;
//测试用主函数
int main() {
LinkList LinkListCreateUseTail(LinkList L, int a[]);
LinkList L = (LNode*)malloc(sizeof(LNode));
if (L == NULL) {
printf("申请空间失败");
exit(0);
}
L->next = NULL;
int a[] = { 1,2,3 };
L=LinkListCreateUseTail(L, a);
for (int i = 0; i < 3; i++) {
L = L->next;
cout << L->data<<endl;
}
return 0;
}
//不带头节点的链表初始化
void LinkedListInit1(LinkList L) {
L = NULL;
}
//带头结点的链表初始化,只是创建一个空的头节点
//(强制转化为该类型的指针)malloc(sizeof(数据类型))
void LinkedListInit2(LinkList L) {
L = (LNode*)malloc(sizeof(LNode));
if (L == NULL) {
printf("申请空间失败");
exit(0);
}
L->next = NULL;
}
//求链表长度,链表长度不包括头结点
int LinkListLength(LinkList L) {
LNode* p;
p = L->next;
int j = 0;
while (p != NULL) {
j++;
p = p->next;
}
return j;
}
//获取链表的第i个元素
int FindByLocation(int i, LinkList list,int *e) {
int j=1;
LinkList p;
p = list->next; //头节点
while (p && j < i) {
p = p->next;
++j;
}
if (!p || j > i) {
return -1;
}
*e = p->data;
return *e;
}
//链表的定位
int FindByNumber(LinkList L, int x) {
LNode* p;
p = L->next;
int j=1;
while (p->data != x&&p==NULL) {
p = p->next;
++j;
}
if (p == NULL) {
printf("链表中没有你要找的元素");
return -1;
}
return j;
}
//链表的创建,头插法
void LinkListCreateUseHeadMethod(LinkList L,int a[]) {
L = (LNode*)malloc(sizeof(LNode));
if (L == NULL) {
printf("申请空间失败");
exit(0);
}
L->next = NULL;
int len;
len = sizeof(a);
for (int i = 0; i < len; i++) {
LinkList p = (LNode*)malloc(sizeof(LNode));
if (p == NULL) {
printf("申请空间失败");
exit(0);
}
p->data = a[i];
p->next = L->next;
L->next = p;
}
}
//链表的创建尾插法
LinkList LinkListCreateUseTail(LinkList L, int a[]) {
L = (LNode*)malloc(sizeof(LNode));
if (L == NULL) {
printf("申请空间失败");
exit(0);
}
L->next = NULL;
LinkList tail = L;
for (int i = 0; i < 3; i++) {
LinkList p = (LNode*)malloc(sizeof(LNode));
if (p == NULL) {
printf("申请空间失败");
exit(0);
}
p->data = a[i];
p->next = NULL;
tail->next = p;
tail = p;
}
return L;
}