首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ 实现的链表,就是无法实现输入,各位帮忙一下,谢谢了

2012-02-20 
C++ 实现的链表,就是无法实现输入,各位帮忙一下,多谢了!#includestdio.h#includestdlib.h#includeios

C++ 实现的链表,就是无法实现输入,各位帮忙一下,多谢了!
#include"stdio.h"
#include"stdlib.h"
#include"iostream.h"

//Class LIST 
class LIST
{
private:
typedef struct LISTER
{
char date;
struct LISTER *next;
}LISTNODER,*LISTPTR;

public:
LIST();
void ListInsert(char );
int ListDelete(char );
void printlist();
int Listempty();


private:
LISTPTR sPtr;
char value;
};

LIST::LIST()
{
sPtr=NULL;
}

void LIST::ListInsert(char value)
{
LISTPTR newPtr,currentPtr,previousPtr;
newPtr=new LISTNODER;

if(newPtr!=NULL)
{
newPtr->date=value;
newPtr->next=NULL;

previousPtr=NULL;
currentPtr=sPtr;

while((value>currentPtr->date)&&(currentPtr!=NULL))
{
previousPtr=currentPtr;
currentPtr=currentPtr->next;
}

if(previousPtr==NULL)
{
newPtr->next=sPtr; //
sPtr=newPtr;
}
else
{
previousPtr->next=newPtr;
newPtr->next=currentPtr;
}
}
else
{
cout<<"invaild memory!"<<endl;
}
}


int LIST::ListDelete(char value)
{
LISTPTR tempPtr,currentPtr,previousPtr;

if(!sPtr)
{
return 0;
}

if(value==sPtr->date)
{
tempPtr=sPtr;
sPtr=sPtr->next; //
delete tempPtr;
return 1;
}
else
{
previousPtr=sPtr;
currentPtr=sPtr->next;//

while((currentPtr->date!=value)&&(currentPtr!=NULL))
{
previousPtr=currentPtr;
currentPtr=currentPtr->next;
}
if(currentPtr!=NULL)
{
tempPtr=currentPtr;
previousPtr->next=currentPtr->next;
delete tempPtr;
return 1;
}
}
return 0;
}

int LIST::Listempty()
{
return sPtr==NULL;
}

void LIST::printlist()
{
LISTPTR temp;
temp=sPtr; //
if(sPtr==NULL)
{
cout<<"invaild List!"<<endl;
}
else
{
while(temp!=NULL)
{
cout<<temp->date<<"-->";
temp=temp->next;
}
cout<<"NULL"<<endl;
}
}



void main()
{
LIST bbb;

int choice;
char item;


cout << "?" ;
cin >> choice;

while(choice!=3){

switch(choice){
case 1://插入某值入链表
cout << "Enter a character:";
cin >> item;
bbb.ListInsert(item);
bbb.printlist();
break;

case 2: //从链表删除某值
if(!bbb.Listempty())
{
printf("Enter character to be deleted:");
scanf("\n%c",&item);
if(bbb.ListDelete(item))
{
printf("%c deleted.\n",item);
bbb.printlist();
}
else
printf("%c not found.\n\n",item);
}
else
{
cout<<"list is empty!"<<endl;
}
break;

default:
printf("Invalid choice.\n\n");
break;
}
printf("?");
scanf("%d",&choice);
}
printf("End of run.\n");
}




[解决办法]

C/C++ code
void LIST::ListInsert(char value) {     LISTPTR newPtr,currentPtr,previousPtr;     newPtr=new LISTNODER;         if(newPtr!=NULL)     {         newPtr-> date=value;         newPtr-> next=NULL;                 previousPtr=NULL;         currentPtr=sPtr;                 while((currentPtr!=NULL)&&(value> currentPtr-> date))         { //条件判断先后不对            previousPtr=currentPtr;             currentPtr=currentPtr-> next;         }                 if(previousPtr==NULL)         {             newPtr-> next=sPtr;  //             sPtr=newPtr;         }         else         {             previousPtr-> next=newPtr;             newPtr-> next=currentPtr;         }     }     else     {         cout <<"invaild memory!" <<endl;     } } 

热点排行