实现单链表
#include "stdafx.h"
#include <string>
#include <vector>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include<cmath>
#include<sstream>
#include <bitset>
using namespace std;
// 设计实现一个整数单链表类型 slist, 实现如下几个方法, 并添加适当的测试代码示例。
// 注意:严格按函数声明实现,不可修改函数签名。
struct slist_node
{
int m_nValue;
slist_node* m_pNext;
slist_node(int temValue):m_nValue(temValue),m_pNext(NULL){
}
};
typedef struct slist_node* slist;
// 创建空链表。
slist slist_create();
slist slist_create()
{
slist newSlist = new slist_node(0);
return newSlist;
}
// 销毁链表。
void slist_destroy(slist* pList);
void slist_destroy(slist* pList)
{
delete **pList;
}
// 打印链表, 用 "(", ")" 括起来, 元素之间用空格分割。如 "()" "(1 3 )" 等。
void slist_print(slist a);
void slist_print(slist a)
{
cout<<"(";
while (a != NULL)
{
cout<<a->m_nValue<<" ";
a = a->m_pNext;
}
cout<<")";
}
// 添加一个整数到链表头。
void slist_push(slist* pList, int n);
void slist_push(slist* pList, int n)
{
slist topSlist = new slist_node(n);
topSlist->m_pNext = *pList;
*pList = topSlist;
delete topSlist;
}
// 将链表中的整数从小到大排序。自己实现排序,不要调用库函数,不要使用数组。
void slist_sort(slist* pList);
void slist_sort(slist* pList)
{
if (pList==NULL || *pList==NULL || (*pList)->m_pNext==NULL)
{
return;
}
slist head = new slist_node(0);
head->m_pNext = *pList;
//冒泡排序法
slist tail = NULL;
slist curNode = head->m_pNext;
while(curNode != tail)
{
while (curNode != tail)
{
if (curNode->m_pNext == tail)
{
tail = curNode;
break;
}
else if (curNode->m_nValue <= curNode->m_pNext->m_nValue)
{
curNode = curNode->m_pNext;
}
else
{
int nTemNode = curNode->m_nValue;
curNode->m_nValue = curNode->m_pNext->m_nValue;
curNode->m_pNext->m_nValue = nTemNode;
curNode = curNode->m_pNext;
}
}
curNode = head->m_pNext;
}
*pList = head->m_pNext;
}
int main()
{
slist testNode1 = new slist_node(3);
slist testNode2 = new slist_node(2);
slist testNode3 = new slist_node(6);
slist testNode4 = new slist_node(4);
testNode1->m_pNext = testNode2;
testNode2->m_pNext = testNode3;
testNode3->m_pNext = testNode4;
slist* testNode = &testNode1;
slist_sort(testNode);
slist_print(testNode1);
delete testNode1;
delete testNode2;
delete testNode3;
delete testNode4;
system("pause");
return 0;
}