#include <stdio.h>
#include <malloc.h>
#define TRUE 1
#define FALSE 0
typedef struct LNode {
int data;
struct LNode* next;
}LNode,* LinkList;
int InitList(LinkList);
int ListInsert(LinkList, int pos, int e);
int ListDelete(LinkList, int pos, int* e);
void Print(LinkList);
LNode * GetElem(LinkList sq,int pos);
LNode* LocatElem(LinkList sq, int e);
//指定结点后查操作
int InsertNextNode(LinkList sq,int e);
//指定结点前查操作
int InserPriorNode(LNode*, int e);
//指定结点删除
int DeleteNode(LNode* p);
int Length(LinkList);
int main() {
LNode L;
int e;
InitList(&L);
ListInsert(&L,1,1);
ListInsert(&L,2,2);
ListInsert(&L,3,3);
ListInsert(&L,4,4);
ListInsert(&L,5,5);
ListDelete(&L, 1,&e);
Print(&L);
return 0;
}
int InitList(LinkList L) {
L = (LNode *)malloc(sizeof(LNode));
L->next = NULL;
return TRUE;
}
int ListInsert(LinkList L, int pos, int e) {
if (pos<1) {
return FALSE;
}
LNode* p = L;
int j = 0;
while (p!=NULL&&j<pos-1)
{
p = p->next;
j++;
}
if (p==NULL) {
return FALSE;
}
InsertNextNode(p,e);
return TRUE;
}
int ListDelete(LinkList L, int pos, int* e) {
if (pos<1) {
return FALSE;
}
int j = 0;
LNode* p = L;
while (p!=NULL&&j<pos-1)//p指向要插入的结点的前驱结点
{
p = p->next;
j++;
}
if (p==NULL) {
return FALSE;
}
LNode* q = p->next;
*e = q->data;
p->next = q->next;
free(q);
return TRUE;
}
void Print(LinkList L) {
LinkList p = L;
while (p->next) {
p = p->next;
printf("%d ",p->data);
}
printf("\n");
}
int InsertNextNode(LinkList p, int e) {
if (p ==NULL) {
return FALSE;
}
LNode* q = (LNode *)malloc(sizeof(LNode));
q->data = e;
q->next = p->next;
p->next = q;
return TRUE;
}
int InserPriorNode(LNode* p, int e) {
if (!p) {
return FALSE;
}
LNode* q = (LNode *)malloc(sizeof(LNode));
q->data = p->data;
p->data = e;
q->next = p->next;
p->next = q;
return TRUE;
}
int DeleteNode(LNode* p) {
if (!p) {
return FALSE;
}
LNode* q = p->next;
p->data = p->next->data;
p->next = q->next;
free(q);
return TRUE;
}
LNode * GetElem(LinkList sq, int pos) {
if (pos<0) {
return NULL;
}
LNode* p;
int j = 0;
p = sq;
while (p!=NULL&&pos>j)
{
p = p->next;
j++;
}
return p;
}
LNode* LocatElem(LinkList sq, int e) {
LNode* p = sq->next;
while (p!=NULL&&p->data!=e)
{
p = p->next;
}
return p;
}
int Length(LinkList p) {
LNode* q = p;
int sum = 0;
while (q->next!=NULL)
{
q = q->next;
sum++;
}
return sum;
}
单链表
最新推荐文章于 2025-04-10 21:01:16 发布