珞珈山水BBS电脑网络程序人生 → 单文区文章阅读

单文区文章阅读 [返回]
发信人: iBook (Linux真好玩), 信区: Programm
标  题: 太莫名其妙了。。。
发信站: 珞珈山水BBS站 (Thu Dec  1 21:03:28 2005), 站内

【 以下文字转载自 Software 讨论区 】
发信人: tigerger (tigerger), 信区: Software
标  题: 太莫名其妙了。。。
发信站: BBS 珞珈山水站 (Thu Dec  1 21:00:04 2005)

写了一段程序,如下:(虽然蛮长,其实很简单的)

// lb.cpp : Defines the entry point for the application.
//

#include "stdafx.h"

#include <stdio.h>
#include <stdlib.h>

#define ElemType char
typedef struct Node    /*结点类型定义*/ 

    ElemType data;
    struct Node  * next;
}Node, *LinkList;  /* LinkList为结构指针类型*/


LinkList CreateFromTail()
/*通过键盘输入表中元素值,利用尾插法建单链表,并返回该单链表头指针L*/

    LinkList L;
    Node *r, *s;
    char c;
    int   flag =1; /*设置一个标志,初值为1,当输入"$"时,flag为0,建表结束*/
    L=(Node * )malloc(sizeof(Node));     
    L->next=NULL;
        /*为头结点分配存储空间,建立空的单链表L*/
    r=L;                /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指
向头结点*/
    while(flag)         /*循环输入表中元素值,将建立新结点s插入表尾*/
    {
        c=getchar();
        if(c!='$')
        {
            s=(Node*)malloc(sizeof(Node));
            s->data=c;
            r->next=s;
            r=s;
        }
        else
        {
            flag=0;
            r->next=NULL;   /*将最后一个结点的next链域置为空,表示链表的结束*/

        }
    }  
    return L;


void InsertIntoLinkList(LinkList l,int site,Node *node)
{LinkList p,k=NULL;
p=l;
    int i;
for(i=1;i<site;i++)p=p->next;
k=p->next;
p->next=node;
node->next=k;

}

void DeleteFromLinkList(LinkList l,int site)
{LinkList p,k=NULL;
p=l;
int i;
for(i=1;i<site;i++)p=p->next;
k=p->next;
p->next=k->next;
delete k;

}


int main(int argc, char* argv[])
{
    LinkList k,l=NULL,j;

    Node *p;

    
    
    char c;
    int choice=0;
    int site = 0;
    int m=0,n;
    //clrscr();
    
    while(choice!=4)
    {
        printf("/****************/\n");
        printf("0.Create LinkList\n");
        printf("1.In LinkList\n");
        printf("2.Out LinkList\n");
        printf("3.Print Out\n");
        printf("4.Exit\n");
        printf("Your selection:");
        scanf("%d",&choice);
        switch(choice)
        {
            case 0:
                if(!l)
                {
                    l=CreateFromTail(); 
                k=l;
                k=k->next;
                    while(k){m++;
                    k=k->next;}//创建链表
                }
                else
                {
                    printf("LinkList has been created before!:\n");
                }
                break;
            case 1:
                p=(Node * )malloc(sizeof(Node)); 
            
                printf("please input the site(1,2,...) the element will be ins
erted into the LinkList:\n");
                scanf("%d",&site);
                printf("please input the element that go into LinkList:\n");
                scanf("%s",&p->data);
                InsertIntoLinkList(l,site,p);
            m++;
                printf("There are %d elements in LinkList \n",m-1);
                break;
            case 2:
                printf("please input the site(1,2,...) the element will be del
eted from  the LinkList:\n");
                scanf("%d",&site);
                
                DeleteFromLinkList(l,site);
        
                        
                m--;
                printf("There are %d elements in LinkList \n",m);
                break;
            case 3:
            j=l;
                if(m>0)
                    printf("There are %d elements in LinkList as following:\n"
,m-1);
        n=1;
j=j->next;
    
                while(j)
                {
                    printf("ElementNo. %d,   element is %C\n",n,j->data);
                    j=j->next;
                    n++;
                }
                break;
            case 4:
                break;
        }
    }
    return 0;
}
把这段程序放到VC++上应行。你会发现执行3操作。第一个元素显示不出来。这是怎么回事
?各位大虾把小弟想一哈子撒。我都想了一天了。头都想大了许多。

--

※ 来源:·珞珈山水BBS站 http://bbs.whu.edu.cn·[FROM: 222.20.226.*]
[返回单文区目录]

武汉大学BBS 珞珈山水站 All rights reserved.
wForum , 页面执行时间:7.773毫秒