大三狗比较菜,以上代码在我的机子能运行,不保证完全正确...如有错误,欢迎指正!!!
头插法:
#include <stdio.h>
#include <malloc.h>
typedef struct Node {
int data;
struct Node* next;
}Node, * LinkList;
LinkList createListH(LinkList L) {//头插法,L为链表头?
L = (LinkList)malloc(sizeof(Node));
L->next = NULL;
LinkList p; int x;
scanf_s("%d", &x);
while (x != -1) {
p = (LinkList)malloc(sizeof(Node));
p->data = x;
//新结点p的next指针域指向L的开始结点(L->next)
p->next = L->next;
//头结点的next指针域指向新结点p,使得新结点p成为新的开始结点
L->next = p;
scanf_s("%d", &x);
}
return L;
}
// 1 2 3 4 -1
void printN(LinkList n) {
LinkList p = n->next;
while (p) {
printf("%d\n", p->data);
p = p->next;
}
}
int main() {
Node n;
LinkList p = createListH(&n);
printN(p);
return 0;
}
尾插法:
#include <stdio.h>
#include <malloc.h>
typedef struct Node {
int data;
struct Node* next;
}Node, * LinkList;
LinkList createNode(LinkList L) {//尾插法
LinkList p; //p指向新申请的结点
//申请头结点空间
L = (LinkList)malloc(sizeof(Node));
//ptail始终指向尾元素,刚开始L为尾元素
LinkList ptail = L;
ptail->next = NULL;
int x;
scanf_s("%d", &x);
while (x != -1) {
p = (LinkList)malloc(sizeof(Node));
p->data = x;
ptail->next = p;
ptail = p;
scanf_s("%d", &x);
}
ptail->next = NULL; //!!!尾指针的next指向NULL
return L;
}
void printNode(LinkList n) {
LinkList p = n->next;
while (p != NULL) {
printf("%d\n", p->data);
p = p->next;
}
}
// 1 2 3 -1
int main() {
Node n;
LinkList p;
p = createNode(&n);
printNode(p);
return 0;
}
查找操作:
按序号查找:
LinkList findByID(LinkList L, int i) {
//i为要查找的第i个元素,从0开始
int j=0;
LinkList p = L->next;
if (i<0) return L;
while (j < i) {
p = p->next;
j++;
}
return p;
}
int main() {
Node n;
LinkList p;
p = createNode(&n);//尾插
printNode(p);
//-----findbyID-------
LinkList search;
search = findByID(p, 1); //传p,不能传&n??
printf("第x个元素为%d\n", search->data);
return 0;
}
按值查找:
int findByElem(LinkList L, int e) {
LinkList p = L->next;
int i = 0;
while (p) {
if (e == p->data) {
return i;
}
i++;
p = p->next;
}
}
int main() {
Node n;
LinkList p;
p = createNode(&n);
printNode(p);
//------------findByElem------------
int search;
search = findByElem(p, 3);
printf("xx元素在第%d个位置(0开始)\n", search);
return 0;
}