|
珞珈山水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.*] |
| [返回单文区目录] |
|
|