单链表数据结构
#ifndef __LINKLIST_H__
#define __LINKLIST_H__
#include <bits/stdc++.h>
using namespace std;
typedef int DataType;
typedef struct node{
DataType data;
struct node *link;
}LinkNode, *LinkList;
#endif
单链表基本操作
#include "LinkList.h"
using namespace std;
void initList(LinkList& first){
first = (LinkNode *)malloc(sizeof(LinkNode));
first->link = NULL;
}
void clearList(LinkList& first){
LinkNode *q;
while(first->link != NULL){
q = first ->link;
first->link = q ->link;
free(q);
}
}
int Length(LinkList& first){
LinkNode *p = first ->link; int count = 0;
while(p != NULL){
p = p ->link;
count ++;
}
return count;
}
LinkNode *Search(LinkList& first, DataType x){
LinkNode *p = first -> link;
while(p != NULL && p -> data != x){
p = p -> link;
}
return p;
}
LinkNode *Locate(LinkList& first, int i){
if(i < 0) return NULL;
LinkNode *p = first -> link;
int count = 1;
while(count != i && p != NULL){
p = p ->link;
count ++;
}
return p;
}
bool Insert(LinkList& first, int i, DataType x){
LinkNode *p = Locate(first, i - 1);
if(p == NULL) return false;
LinkNode *q = (LinkNode *)malloc(sizeof(LinkNode));
if(!q) return false;
q ->data = x;
q ->link = p ->link; p ->link = q;
return true;
}
bool Remove(LinkList& first, int i, DataType& x){
LinkNode *p = Locate(first, i - 1);
if(p == NULL || p ->link == NULL) return false;
LinkNode *q = p ->link;
x = q ->data;
p ->link = q ->link;
free(q);
return true;
}
void printList(LinkList& first){
LinkNode *p;
for(p = first ->link; p != NULL; p = p ->link) cout << p ->data << ", ";
cout << endl;
}
单链表前插_后插
#include <bits/stdc++.h>
#include "LinkList.cpp"
using namespace std;
void insertRear(LinkNode *& last, DataType endTag){
DataType value;
cin >> value;
if(value == endTag){last = NULL;}
else{
last = (LinkNode *)malloc(sizeof(LinkNode));
last ->data = value;
insertRear(last ->link, endTag);
}
}
void insertFront(LinkNode *& first, DataType endTag){
DataType value;
cin >> value;
if(value == endTag){return;}
else{
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s ->data = value; s ->link = first ->link;
first ->link = s;
insertFront(first, endTag);
}
}
int main(){
LinkList L; initList(L);
DataType endTag = -1;
LinkNode *rear = L;
insertRear(rear ->link, endTag);
printList(L);
system("pause");
}