#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct LNode {
int data;
struct LNode *next;
}LNode,*LinkList;
//初始化链表
LinkList LinkList_init(LinkList L)
{
L = (LinkList)malloc(sizeof(LNode));
return L;
}
//头插法建立单链表
LinkList LinkList_HeadInsert(LinkList L)
{
LinkList s;
int x;
LinkList_init(L);
scanf("%d",&x);
//输入9999表示结束
while (x != 9999)
{
s= (LinkList)malloc(sizeof(LNode));
if (s == NULL)
{
return NULL;
}
s->next= L->next;
s->data=x;
L->next=s;
scanf("%d",&x);
}
return L;
}
//尾插法建立单链表
LinkList LinkList_TailInsert(LinkList L)
{
LinkList_init(L);
LinkList s,r=L;
int x;
scanf("%d", &x);
//输入9999表示结束
while (x!= 9999)
{
s= (LinkList)malloc(sizeof(LNode));
if (s == NULL)
{
return NULL;
}
r->next=s;
s->data=x;
s->next=NULL;
r = s;
scanf("%d",&x);
}
return L;
}
//按序号查找结点值
LinkList GetElem(LinkList L, int i)
{
if (i < 1)
{
return NULL;
}
LinkList p = L->next;
for (int j = 1; j < i&&p!=NULL; j++)
{
p = p->next;
}
return p;
}
//按值查找结点
LinkList LocateElem(LinkList L, int a)
{
LinkList p = L->next;
while (p->data != a && p != NULL)
{
p= p->next;
}
return p;
}//查找结点的位序
int LocatePos(LinkList L, int a)
{
LinkList p = L->next;
int i = 1;
while (p->data != a && p != NULL)
{
p = p->next;
i++;
}
return i;
}
//求表长
int LinkListLength(LinkList L)
{
LinkList p = L;
int i = 0;
while (p != NULL)
{
i++;
p= p->next;
}
return i;
}
//插入结点
bool Linklist_Insert(LinkList L,int num,int a)
{
if (a < 1)
{
return false;
}
if (a == 1)
{
LinkList s = (LinkList)malloc(sizeof(LNode));
if (s == NULL)
{
return false;
}
s->data = num;
s->next = L->next;
L->next = s;
return true;
}
LinkList p = GetElem(L, a - 1);
LinkList s = (LinkList)malloc(sizeof(LNode));
if (s == NULL)
{
return false;
}
s->data = num;
s->next = p->next;
p->next = s;
return true;
}
//删除结点
bool LinkList_Delete(LinkList L, int a)
{
if (a < 1)
{
return false;
}
LinkList p = GetElem(L, a - 1);
if (p == NULL)
{
return false;
}
LinkList q = p->next;
p->next = q->next;
free(q);
return true;
}
01-06
3453
08-30
918
06-06