文章目录

引入对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;
}
文章目录