|
发表于 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();
- }
复制代码
|
|