#include<iostream>
#include<string>
#include<cmath>
using namespace std;
#define MaxSize 100
typedef char Elemtype;
typedef int Status;
typedef struct Lnode
{
Elemtype data;
struct Lnode* next;
}LNode,*LinkList;
//单链表的初始化
Status InitList_L(LinkList& L)
{
L = new LNode;
L->next = NULL;
return 1;
}
//判断链表是否为空
int ListEmpty(LinkList L)
{
if (L->next)
return 0;
else
return 1;
}
//单链表的销毁
int DestoryList(LinkList& L)
{
LNode* p;
while (L)
{
p = L;
L = L->next;
delete p;
}
return 1;
}
//清空链表
int ClearList(LinkList& L)
{
LNode* p,*q;
p = L->next;
while (p)
{
q = p->next;
delete p;
p = q;
}
L->next = NULL;
return 1;
}
//求链表表长
int LengthList(LinkList L)
{
LNode* p;
p = L->next;
int i = 0;
while (p)
{
i++;
p = p->next;
}
return i;
}
//取单链表中的第i个元素内容
int getList(LinkList L, int i,Elemtype& e)
{
LNode *p;
p = L->next;
int j = 1;
while (p && j < i)
{
p = p->next;
j++;
}
if (!p || i > j) return 0;
e = p->data;
return 1;
}
//取单链表值为e的位置
int LocateList(LinkList L, Elemtype e)
{
LNode* p;
p = L->next;
int j = 1;
while (p && p->data != e)
{
p = p->next;
j++;
}
if (p) return j;
else return 0;
}
//第i个结点插入值为e的新结点
int Listsert(LinkList& L, int i, Elemtype e)
{
LNode* p;
p = L; int j = 0;
while(p && j < i-1)
{
p = p->next;
j++;
}
if (!p || i < 1) return 0;
LNode* s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return 1;
}
//删除第i个结点
int ListDelete(LinkList& L, int i, Elemtype& e)
{
LNode* p = L; int j = 0;
while (p->next && j < i - 1)
{
p = p->next;
j++;
}
if (!(p->next)||j>i-1) return 0;
LNode* q = p->next;
p->next = p->next->next;
e = q->data;
delete q;
return 1;
}
//头插法
void Creat_H(LinkList& L, int n)
{
for (int i = n; i > 0; i--)
{
LinkList p = new LNode;
cin >> p->data;
p->next = L->next;
L->next = p;
}
}
//尾插法
void Creat_R(LinkList& L, int n)
{
LinkList r = L;
for (int i =0; i < n; i++)
{
LinkList p = new LNode;
cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
}
}
void List_show(LinkList L)
{
LinkList p;
p = L->next;
for (int i = 0; i < LengthList(L); i++)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int isexist(LinkList L)
{
if (L) return 1;
else return 0;
}
int main()
{
LNode* L;
InitList_L(L);
if (ListEmpty(L) == 1)
cout << "该链表为空!" << endl;
//Creat_H(L, 3);
//cout <<"该链表长度为:" << LengthList(L) << endl;
Creat_R(L, 3);
cout << "该链表长度为:" << LengthList(L) << endl;
List_show(L); //显示链表
//DestoryList(L); //显示链表
//cout << isexist(L) << endl; //判断链表是否存在
//ClearList(L); //清空链表
//cout << "--------" << endl;
//List_show(L);
//cout << "--------" << endl;
char a; getList(L, 2, a);
cout << "链表第2个内容为:" << a <<endl;
cout << "链表内容为b的位置为:" << LocateList(L, 'b') << endl; //输入 a b c
Listsert(L, 1, 'c');
char b;
ListDelete(L, 2, b);
cout << "删除的内容为:" << b << endl;
List_show(L);
}
#include<iostream>
#include<string>
using namespace std;
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef char SElemType;
typedef int Status;
typedef struct StackNode
{
SElemType data;
struct StackNode* next;
}StackNode ,*LinkStack;
//链栈初始化
void InitStack(LinkStack& S)
{
S = NULL;
}
//判断链栈是否为空
int StackEmpet(LinkStack S)
{
if (S == NULL)
return true;
return false;
}
//链栈入栈
int Push(LinkStack& S, char e)
{
LinkStack p=new StackNode;
p->data = e;
p->next = S;
S = p;
return OK;
}
//链栈的出栈
int Pop(LinkStack& S, char& e)
{
LinkStack p;
if (S == NULL) return ERROR;
e = S->data;
p = S;
S = S->next;
delete p;
return OK;
}
//取栈顶元素
char GetTop(LinkStack S)
{
if (S != NULL)return S->data;
}
//求链栈长度
int GetLength(LinkStack S)
{
int length=0;
LinkStack p=S;
while (p != NULL)
{
length++;
p = p->next;
}
return length;
}
void Destory(LinkStack& S)
{
LinkStack p;
while (S)
{
p = S;
S = S->next;
delete p;
}
S = NULL;
}
void Is_exist(LinkStack S)
{
if (!S)
cout << "链表不存在!" << endl;
else
cout << "链表存在!" << endl;
}
int main()
{
LinkStack L;
InitStack(L);
cout << "长度为:" << GetLength(L) << endl;
if (StackEmpet(L) == 1)
cout << "此链栈为空!" << endl;
Push(L, 'a');
Push(L, 'b');
Push(L, 'c');
cout << "栈顶元素为:" << GetTop(L) << endl;
char a;
Pop(L,a);
cout << "取出的栈顶元素为:" << a << endl;
cout << "栈顶元素为:" << GetTop(L) << endl;
cout << "长度为:" << GetLength(L) << endl;
Destory(L);
Is_exist(L);
}