以下都是对单链表一些简单的应用和对一些简单问题的解决方案。
代码如下:
#define _CRT_SECURE_NO_WARNINGS //vs2013中需要加的一个宏!
#include<iostream>
#include<string.h>
#include<assert.h>
typedef int DateType;
typedef struct SListNode
{
DateType data;
struct SListNode *next;
}SListNode;
打印节点,代码如下:
void PrintfSlist(SListNode *&pHead) //打印节点
{
SListNode *newHead = pHead;
if (newHead == NULL)
{
return;
}
while (newHead)
{
printf("%d ", newHead->data);
newHead = newHead->next;
}
}
2.创建节点,代码如下:
SListNode* _BuyNode(DateType x) //创建节点
{
SListNode*pHead = (SListNode*)malloc(sizeof(SListNode));
pHead->data = x;
pHead->next = NULL;
return pHead;
}
3.尾插法,代码如下:
void PushBack(SListNode *&pHead, DateType x) //尾插
{
if (pHead == NULL)
{
pHead = _BuyNode(x);
}
else
{
SListNode *tail = pHead;
while (tail->next != NULL)
{
tail = tail->next;
}
tail->next = _BuyNode(x);
}
}
测试代码如下:
void Test1()
{
SListNode *seq = NULL;
PushBack(seq, 1);
PushBack(seq, 2);
PushBack(seq, 3);
PushBack(seq, 4);
PushBack(seq, 5);
PushBack(seq, 6);
PushBack(seq, 7);
PushBack(seq, 8);
PushBack(seq, 9);
PushBack(seq, 10);
PushBack(seq, 11);
PrintfSlist(seq);
}
4.尾出法,代码如下:
void PopBack(SListNode *&pHead) //尾出
{
if (pHead == NULL)
{
return;
}
else if (pHead->next == NULL)
{
free(pHead);
pHead = NULL;
}
else
{
SListNode *prev = pHead;
SListNode *cur = pHead->next;
while (cur->next != NULL)
{
prev = prev->next;
cur = cur->next;
}
free(cur);
prev->next = NULL;
}
}
测试程序如下:
void Test2()
{
SListNode *seq = NULL;
PushBack(seq, 1);
PushBack(seq, 2);
PushBack(seq, 3);
PushBack(seq, 4);
PushBack(seq, 5);
PrintfSlist(seq);
printf("\n");
PopBack(seq);
PrintfSlist(seq);
printf("\n");
PopBack(seq);
PrintfSlist(seq);
printf("\n");
PopBack(seq);
PrintfSlist(seq);
printf("\n");
PopBack(seq);
PrintfSlist(seq);
printf("\n");
PopBack(seq);
PrintfSlist(seq);
printf("\n");
}
5.头插和头出,代码如下:
void PushFront(SListNode *&pHead, DateType x) //头插
{
SListNode *newpHead = _BuyNode(x);
newpHead->next = pHead;
pHead = newpHead;
}
void PopFront(SListNode *&pHead) //头出
{
if (pHead == NULL)
{
return;
}
else
{
SListNode *tmp = pHead->next;
free(pHead);
pHead = tmp;
}
}
测试程序如下:
void Test3()
{
SListNode *seq = NULL;
PushFront(seq, 1);
PushFront(seq, 2);
PushFront(seq, 3);
PushFront(seq, 4);
PushFront(seq, 5);
PrintfSlist(seq);
printf("\n");
PopFront(seq);
PrintfSlist(seq);
printf("\n");
PopFront(seq);
PrintfSlist(seq);
printf("\n");
PopFront(seq);
PrintfSlist(seq);
printf("\n");
PopFront(seq);
PrintfSlist(seq);
printf("\n");
PopFront(seq);
PrintfSlist(seq);
printf("\n");
}
6.找出某个节点并返回节点的地址
SListNode * Find(SListNode *& pHead, DateType x) //找出某个节点并返回节点的地址
{
assert(pHead);
SListNode *NewHead = pHead;
while (NewHead)
{
if (NewHead->data == x)
{
return NewHead;
}
NewHead = NewHead->next;
}
return NULL;
}
本文出自 “零点时光” 博客,请务必保留此出处http://10741764.blog.51cto.com/10731764/1742982