单链表的定义、初始化、增删改查伪代码
//单链表定义 typedef struct LNode{ int data; struct LNode *next; }LNode, *LinkList; //LNode强调节点;LinkList强调链表 struct LNode *p = (struct LNode*)malloc(sizeof(struct LNode)); LNode *p = (LNode*)malloc(sizeof(LNode)); //初始化单链表(不带头结点) bool InitList(LinkList &L){ L = NULL; return true; } //单链表判空(不带头结点) bool Empty(LinkList L){ if (L == NULL) return true; else return false; } //初始化单链表(带头结点) bool InitList(LinkList &L){ L = (LNode*)malloc(sizeof(LNode)); if (L = NULL) return false; L->next = NULL; return true; } //单链表判空(带头结点) bool Empty(LinkList L){ if (L->next = NULL) return true; else return false; } //头插法建立单链表 LinkList List_HeadInsert(LinkList &L){ LNode *s; int x; L = (LinkList)malloc(sizeof(LNode)); L->next = NULL; } //单链表按位序插入(带头结点) bool ListInsert1(LinkList &L, int i, int &e){ if (i < 1) return false; LNode *P; int j = 0; P = L; while (p != NULL&&j < i - 1){ p = p->next; j++; } if (p == NULL) return false; LNode *s = (LNode *)malloc(sizeof(LNode)); s->data = e; s->next = p->next; p->next = s; return true; } //单链表按位序插入(不带头结点) bool ListInsert2(LinkList &L, int i, int &e){ if (i < 1) return false; if (i == 1){ LNode *s = (LNode *)malloc(sizeof(LNode)); s->data = e; s->next = L; L = s; return true; } LNode *P; int j = 1; p = L; while (p != NULL&&j < i - 1){ p = p->next; j++; } if (p == NULL) return false; LNode *s = (LNode *)malloc(sizeof(LNode)); s->data = e; s->next = p->next; p->next = s; return true; } //单链表指定结点的后插操作 bool InsertNextNode(LNode *p, int e){ if (p == NULL) return false; LNode *s = (LNode *)malloc(sizeof(LNode)); if (s == NULL) //内存分配失败 return false; s->data = e; s->next = p->next; p->next = s; return true; } //单链表指定结点的前插操作 bool InsertPriorNode(LNode *p, int e){ if (p = NULL) return false; LNode *s = (LNode *)malloc(sizeof(LNode)); if (s == NULL) //内存分配失败 return false; s->next = p->next; p->next = s; s->data = p->data; p->data = e; return true; } //单链表按位序删除(带头结点) bool ListDelete1(LinkList &L, int i, int &e){ if (i < 1) return false; LNode *P; int j = 0; P = L; while (p != NULL&&j < i - 1){ p = p->next; j++; } if (p == NULL) return false; if (p->next == NULL) return false; LNode *q = p->next; e = q->data; p->next = q->next; free(q); return true; } //单链表删除指定结点p bool DeleteNode(LNode *p){ if (p == NULL) return false; LNode *q = p->next; //最后一个结点不能用! p->data = p->next->data; p->next = q->next; free(q); return true; } //单链表按位查找(带头结点) LNode * GetElem(LinkList L, int i){ int j = 1; LNode *p = L->next; if (i == 0) return L; if (i < 1) return NULL; while (p != NULL&&j < i){ p = p->next; j++; } return p; } LNode * GetElem(LinkList L, int i){ if (i < 0) return NULL; LNode *p; int j = 0; p = L; while (p != NULL&&j < i){ p = p->next; j++; } return p; } //单链表按值查找 LNode * LocateElem(LinkList L, int e){ LNode *p = L->next; while (p != NULL&&p->data != e) p = p->next; return p; } //求表长(带头结点) int Length(LinkList L){ int len = 0; LNode *p = L; while (p->next != NULL){ p = p->next; len++; } return len; } //头插法建立单链表(带头结点) LinkList List_HeadInsert(LinkList &L){ LNode *s; int x; L = (LinkList)malloc(sizeof(LNode)); //初始为空链表!不能丢! L->next = NULL; scanf("%d", &x); while (x != 9999){ s = (LNode*)malloc(sizeof(LNode)); s->data = x; s->next = L->next; L->next = s; scanf("%d", &x); } return L; } //尾插法建立单链表(带头结点) LinkList List_TailInsert(LinkList &L){ int x; L = (LinkList)malloc(sizeof(LNode)); LNode *s, *r = L; scanf("%d", &x); while (x != 9999){ s = (LNode*)malloc(sizeof(LNode)); s->data = x; r->next = s; r = s; scanf("%d", &x); } r->next = NULL; return L; }