int型单链表带头结点
大学基础数据结构
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 10;
typedef int ElemType;
typedef struct LNode {
ElemType data;
LNode* next;
}LNode,*LinkList;
bool InitLinkList(LinkList &L) {
L = (LNode*)malloc(sizeof(LNode));
if (L == NULL) return false;
else L->next = NULL;
return true;
}
LNode* GetElem(LinkList L, int i) {
if (i < 0)return NULL;
LNode* p = L;
for (int j = 0; p!=NULL&&j < i; j++) {
p = p->next;
}
return p;
}
bool InsertNextLNode(LNode* p, ElemType e) {
if (p == NULL)return false;
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
bool InsertPriorLNode__fun1(LinkList L, LNode* p, ElemType e) {
LNode* q = L;
while (q != NULL && q->next != p) {
q = q->next;
}
if (q == NULL) return false;
InsertNextLNode(q, e);
}
bool InsertPriorLNode__fun2(LNode* p, ElemType e) {
if (p == NULL)return false;
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = p->data;
p->data = e;
s->next = p->next;
p->next = s;
return true;
}
bool Insert_i(LinkList& L,int i,ElemType e) {
LNode* p=GetElem(L,i-1);
InsertNextLNode(p, e);
return true;
}
bool Delet_i(LinkList& L, int i, ElemType& e) {
LNode* p=GetElem(L, i-1);
if (p == NULL||p->next==NULL)return false;
LNode* q = p->next;
e = q->data;
p->next= q->next;
free(q);
}
bool Delet_p(LinkList& L, LNode* p) {
LNode* q = L;
while (q != NULL && q->next != p) {
q = q->next;
}
if (q == NULL || q->next == NULL)return false;
q->next = q->next->next;
free(p);
return true;
}
bool Delet_p_fun2(LNode* p) {
if (p == NULL || p -> next == NULL)return false;
LNode* q = p->next;
p->data = q->data;
p->next = q->next;
free(q);
}
LinkList List_headInsert(LinkList& L) {
InitLinkList(L);
ElemType x;
scanf("%d", &x);
while (x!= 9999) {
InsertNextLNode(L, x);
scanf("%d", &x);
}
return L;
}
int LinkList_len(LinkList L) {
int i = 0;
LNode* p = L->next;
while (p != NULL) {
p=p->next;
i++;
}
return i;
}
LinkList List_TailInsert(LinkList& L) {
InitLinkList(L);
int x;
scanf("%d", &x);
while (x != 9999) {
int i = LinkList_len(L) + 1;
Insert_i(L,i,x);
scanf("%d", &x);
}
return L;
}
LinkList List_TailInsert_fun1(LinkList& L) {
InitLinkList(L);
LNode* r= L;
int x;
scanf("%d", &x);
while (x != 9999) {
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = x;
s->next = r->next;
r->next = s;
r = s;
scanf("%d", &x);
}
return L;
}
void Print_LinkList(LinkList L) {
LNode* p = L->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
LNode* LocateElem(LinkList L,ElemType e) {
LNode* p = L->next;
while (p != NULL && p->data != e) {
p = p->next;
}
return p;
}
int main() {
LinkList L;
List_TailInsert_fun1(L);
Print_LinkList(L);
}