|  | 
 
 发表于 2013-4-25 23:56:05
|
显示全部楼层 
| 老实说没怎么看懂你的代码,双向链表我也不是很懂,所以查资料搞了半天也没全搞出来。 大概你的意思是先创建一个双向循环链表,插入元素,然后排序,最后输出。
 改了一部分,可以实现创建,插入还有输出了,排序还没看,没想到办法呢
 明天学习一下再看
 以下是代码,仅供参考:
 
 复制代码#include <stdio.h>
#include <stdlib.h>
typedef struct _list
{
        int elem;
        struct _list *pPre;
        struct _list *pNext;
}List;
List *CreatList()//创建一个双线链表
{
        List *pHead = (List*)malloc(sizeof(List));
        pHead->elem = 0;
        pHead->pNext = pHead->pPre = NULL;
        return pHead;
}
void InsertList(List *pHead,int elem)//头插法插入数据函数
{
        
        if ((pHead->pNext==NULL) && (pHead->pPre==NULL))
        {
                pHead->elem = elem;//数据初始化
                pHead->pNext = pHead->pPre = pHead;
        }else
        {
                List *pCur = pHead,*pTemp = pCur->pNext;
                List *pNew = (List*)malloc(sizeof(List));
                pNew->elem = elem;//数据初始化
                pNew->pNext = pHead;
                pNew->pPre = pHead->pPre;
                pHead->pPre->pNext = pNew;
                pHead->pPre = pNew;
        }
        
        
}
void Print(List *pHead)//打印链表函数
{
        printf("%d,",pHead->elem);
        List *pCurrent = pHead->pNext;
        while(pCurrent!=pHead)
        {
                printf("%d,",pCurrent->elem);
                pCurrent = pCurrent->pNext;
        }
}
void main()
{
        List *pHead = CreatList();
        List *pCur = pHead,*pPrev,*pT=pHead;
        int data[] = {1,32,4,3,24,2,5},count = 0,i = 0;
        count = sizeof(data)/sizeof(data[0]);
        for(i=0;i<count;i++)
        {
                InsertList(pHead,data[i]);
        }
        //下面是插入法排序的算法,
//         while(pCur->pNext!=pHead)
//         {
//                 pPrev = pCur;
//                 for(pT=pPrev->pPre;pT!=pHead;pT=pT->pPre)
//                 {
//                         if(pT->elem <= pPrev->elem)
//                         {
//                                 break;
//                         }
//                 }
//                 pPrev->pNext = pT->pNext;
//                 pT->pNext = pPrev;
//                 pPrev->pPre = pT->pNext->pPre;
//                 pT->pNext->pPre = pPrev;
// 
//         }
        Print(pHead);
        getchar();
}
 
 | 
 |