数据结构--线性表--双向链表

来源:互联网 发布:网络运营商选择 编辑:程序博客网 时间:2024/06/05 05:33

学习双向链表,主要遇到以下问题:

1.双向链表的建立

其实和循环链表什么的没有区别,把没用到的节点置为NULL,最后来个p1->next=DL->next;         DL->next->prior=p1;就可以了

  
*p1,*p2;
    int len,e;
    DL=(DLinkList)malloc(sizeof(DLNode));
    DL->next=DL->prior=NULL;
    p1=DL;
    ...
    for(int i=0;i<len;i++)
    {
        p2=(DLinkList)malloc(sizeof(DLNode));
        p2->data=e;
        p2->next=p1->next;
        p1->next=p2;
        p2->prior=p1;    
        p1=p2;
    }
   p1->next=DL->next;
    DL->next->prior=p1;


2.取第i个元素的位置指针p

错误格式为:

DLNode GetElem(DLinkList &DL,int i)//注意格式!
{
    ...
    return *p;
}

void Insert(DLinkList &DL)
{
    ...
    DLNode *p1=GetElem(DL,pos);


正确格式如下:

DLNode* GetElem(DLinkList &DL,int i)//注意格式!
{
    ...
    return p;
}

3.依次输入26个英语字母,    利用ASCALL


for(int i=0;i<26;i++)
    {...
        p2->data='A'+i;

}


4.C语言中字符char的输入输出要依靠gertchar()和putchar(),拒绝printf()和scanf();(因为回车键)


5.出现了

E:\c++\dsaf\sa.cpp(51) : error C2065: 'RR' : undeclared identifier
E:\c++\dsaf\sa.cpp(74) : error C2373: 'RR' : redefinition; different type modifiers

错误原因是:

void Try(DLinkList &DL)
{
    n=RR();
   ...
}

int RR()//产生随机数
{
    ...
}


改正错误后应为:

int RR()//产生随机数
{
    ...
}

void Try(DLinkList &DL)
{
    n=RR();
   ...
}

它说我未声明直接调用了,上下找没有啊,结果问题出在这儿了,太鬼畜了!


6.随机数

VC中最简单的一种:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
srand(time(0)); /*设置种子,并生成伪随机序列*/
printf("%d\n",rand()%100);/*得到[0,99]伪随机数*/
}

7.在循环中生成随机数:

错误做法:

for(...)

{

    srand(time(0));
    n= rand()%100;

}

此做法循环出的随机数为同一个数                              原因在于/*

srand()函数是初始化随机数产生器,它产生随机数种子,说白了就是初始化随机数。srand((unsigned)time(0));取的是系统时间,也就是距离1970.1.1午夜有多少秒。而for循环每循环一次时间远远小于1秒,这就导致了srand((unsigned)time(0))产生的种子并没有改变。 那么,相同的随机数种子所产生的随机数肯定是一样的了。
*/

正确做法为:

 srand(time(0));
    for(...)
    {
        n=rand()%100;



0 0
原创粉丝点击