#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct LNode {
ElemType data;
struct LNode* next;
}LinkNode;
//日方中方睨,物方生方死
//头插法整体建立单链表
void CreateListF(LinkNode*& L, ElemType a[], int n) {
LinkNode* s;
L = (LinkNode*)malloc(sizeof(LinkNode));
L->next = NULL;
for (int i = 0; i < n; i++)
{
s = (LinkNode*)malloc(sizeof(LinkNode));
L->data = a[i];
s->next = L->next;
L->next = s;
}
}
//尾插法整体建立单链表
void CreateListR(LinkNode*& L, ElemType a[], int n) {
LinkNode* s, * r;
L = (LinkNode*)malloc(sizeof(LinkNode));
L->next = NULL;
r = L;
for (int i = 0; i < n; i++)
{
s = (LinkNode*)malloc(sizeof(LinkNode));
L->data = a[i];
r->next = s;
r = s;
}
r->next = NULL;
}
//初始化线性表
void InitList(LinkNode*& L) {
L = (LinkNode*)malloc(sizeof(LinkNode));
L->next = NULL;
}
//销毁线性表
void DestroyList(LinkNode*& L) {
LinkNode* pre = L, * p = pre->next;
while (pre != NULL) {
free(pre);
pre = p;
p = pre->next;
}
free(pre);
}
//判断是否为空表
bool ListEmpty(LinkNode* L) {
return (L->next == NULL);
}
//求线性表的长度
int ListLength(LinkNode* L) {
int i = 0;
LinkNode* p = L;
while (p->next != NULL)
{
i++;
p = p->next;
}
return i;
}
//输出线性表
void DispList(LinkNode* L) {
LinkNode* p = L->next;
while (p != NULL) {
printf("%c ", p->data);
p = p->next;
}
printf("\n");
}
//求线性表中第i个元素的值
bool GetElem(LinkNode* L, int i, ElemType& e) {
int j = 0;
LinkNode* p = L;
//i错误返回假
if (i <= 0)
{
return false;
}
//找第i个结点
while (j < i && p != NULL)
{
j++;
p = p->next;
}
//不存在第i个结点,返回false
if (p == NULL)
{
return false;
}
else {
e = p->data;
return true;
}
}
//查找第一个值域为e的元素序号
int LocateElem(LinkNode* L, ElemType e) {
int i = 1;
LinkNode* p = L->next;
while (p->data != e && p != NULL) {
i++;
p = p->next;
}
if (p == NULL)
{
return false;
}
else {
return i;
}
}
//插入第i个元素
bool InsertList(LinkNode* L, int i, ElemType e) {
int j = 0;
LinkNode* p = L,*s;
if (i <= 0) {
return false;
}
while (j < i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)
{
return false;
}
else {
s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = e;
s->next = p->next;
p->next = s; //头插法
return true;
}
}
int main() {
LinkNode* h;
ElemType e;
InitList(h);
InsertList(h, 1, 'a');
InsertList(h, 2, 'b');
InsertList(h, 3, 'c');
InsertList(h, 4, 'd');
InsertList(h, 5, 'e');
printf("输出单链表");
DispList(h);
printf("%d", ListLength(h));
}
很典型的面向过程