文章目录
引入对typedef struct and struct 的结构的比较。百度文库
在C 和C++中有三种定义结构的方法
1.//这种方法可以在C and C++中定义一个S1结构体
typedef struct{
}S1;
2.//只能在C++使用
struct S2{
};
3.//这种方法并没有定义结构体,而是定义了一个S3的结构变量,编译器会为S3分配内存
struct{
}S3;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| #include<iostream> using namespace std; typedef struct Node{ int m_nValue; Node* m_pNext;
}Node,*List;//必须添加typedef void InsertNode(List& L,int data){ Node* p=new Node; p->m_nValue=data; p->m_pNext=NULL; if(NULL==L) L=p; else{//采用头插法 p->m_pNext=L; L=p; }
} void DeleteNode(List& L, Node* pToBeDeleted){ Node* p=new Node; if(!L||!pToBeDeleted) return; if(pToBeDeleted==L){//删除头结点 L=L->m_pNext; delete pToBeDeleted; pToBeDeleted=NULL; } else{ if(pToBeDeleted->m_pNext==NULL){//尾节点
p=L; while(p->m_pNext!=pToBeDeleted){ p=p->m_pNext; } p->m_pNext=NULL; delete pToBeDeleted; pToBeDeleted=NULL; } else{//中间节点,用后一个数据直接覆盖前一个数据 p=pToBeDeleted->m_pNext; pToBeDeleted->m_nValue=p->m_nValue; pToBeDeleted->m_pNext=p->m_pNext; delete p; p=NULL; } } } void PrintNode(List& L){ if(NULL==L); else{ Node* p=L; while(p){ cout<<p->m_nValue<<" "; p=p->m_pNext; } cout<<endl; } }
int main(){ List L=NULL; int data; Node* p; InsertNode(L,1); InsertNode(L,2); InsertNode(L,3); InsertNode(L,4); PrintNode(L);
cout<<"输入删除节点:"; cin>>data; while(data){
p=L; while(p->m_nValue!=data&& p) p=p->m_pNext; DeleteNode(L,p); PrintNode(L); cin>>data; } return 0; }
|