データ構造C言語版--単一チェーンテーブルの基本機能を実現
13860 ワード
/*
* ( 9999 , ),
* 。
* :new delete C++
malloc free C++/C
*/
#include
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
//
struct LinkNode{
int data; //
struct LinkNode *next; //
};
//1. , ,
void print(LinkNode *L){
LinkNode *p; // p
p = L->next; // p L
while(p != 0){
printf("%d、",p->data);
p = p->next; //
}
printf("
"); //
}
//2.
int Length_LinkList(LinkNode *L){
LinkNode *p; //
int len = 0; // ,
p = L->next; // P
while(p != NULL){
len++ ;
p = p->next; // ,
}
return len; //
}
//3. , i , i
LinkNode* FindI_LinkNode(LinkNode *L,int i){
LinkNode *p; //
int j = 1; //
p = L->next; // p
while(j < i){ // i
p = p->next; //
j++; //
}
return p;
}
//4. , e, e
int FindE_LinkNode(LinkNode* L,int e){
LinkNode *p;
int count=0;
p=L->next;
while(p != NULL)
{
count++;
if(p->data==e)
return (count);
p=p->next;
}
return 0;
}
//5.
int Insert_head(LinkNode* &L,int x){
// H
LinkNode *t; //
t = new LinkNode; //
t->data = x; //
t->next = L->next; // , null
L->next = t; // next ,
return OK;
}
//6.
int Insert_end(LinkNode *L,int x){
LinkNode *t;
t = new LinkNode; //
t->data = x; //
while(L->next != NULL){// , ,
L = L->next; //
} //
L->next = t; //
t->next = NULL; //
return OK;
}
//7. i
int Insert_LinkNode(LinkNode *L,int i,int x){
if(i < 1 || i > Length_LinkList(L)){
printf(" !
");
return ERROR;
}
LinkNode *p;
if(i == 1)
p = L; // P
else
p = FindI_LinkNode(L,i-1); // P i-1
Insert_head(p,x); // x p
return OK;
}
//8.
int Del_Head(LinkNode *L){
if(L->next != NULL){
LinkNode *p; //
p = L->next; // p ,p->next
L->next = p->next; //
delete p; // ,
}else{
printf(" !
");
return FALSE;
}
}
//9.
int Del_End(LinkNode *L){
if(L->next != NULL){
LinkNode *p;
LinkNode *q;
int i;
p = L->next; // p
for(i = 1;i < Length_LinkList(L) - 1;i++){
p = p->next;
}
q = p->next;
p->next = NULL;
//free(q);
delete q;
}else{
printf(" !");
}
}
//10.
int Del_i(LinkNode* L,int i){
if(i<1 || i>Length_LinkList(L))//
{
printf(" !");
return 0;
}
LinkNode *p;
if(i==1)
p=L; // p
else
p=FindI_LinkNode(L,i-1); // p i-1
Del_Head(p); // p
return OK;
}
/*
* , ,
*/
int main(){
int i,x,count,m;
LinkNode *H; //
LinkNode *add;
H = new LinkNode; //
//H->data = -1; //
H->next = NULL; //
printf(" :
");
while(1){
scanf("%d",&i);
if(i == 9999){
break;
}else{
Insert_end(H,i); //
}
}
printf("The LinkNode elem is:");
print(H); //
printf("1. :");
scanf("%d",&i);
Insert_head(H,i);
printf("The LinkNode elem is:");
print(H);
printf("2. :");
scanf("%d",&i);
Insert_end(H,i);
printf("The LinkNode elem is:");
print(H);
printf("3. 、 ( ):
");//
scanf("%d %d",&i,&x);
Insert_LinkNode(H,i,x);
printf("The LinkNode elem is:");
print(H);
printf("4. :");
scanf("%d",&i);
if(i < 1 || i > Length_LinkList(H)){ // , error
printf(" !
");
}else{
add = FindI_LinkNode(H,i);
int e = add->data;
printf(" :%d :%d
",i,e);
}
printf("4. :
");
scanf("%d",&i);
m = FindE_LinkNode(H,i);
if(m == 0){
printf(" !
");
}else{
printf(" :%d :%d
",i,m);
}
Del_Head(H);
printf("5. :
The LinkNode elem is:");
print(H);
Del_End(H);
printf("6. :
The LinkNode elem is:");
print(H);
printf("7. :
");
scanf("%d",&i);
if(i < 1 || i > Length_LinkList(H)){ // , error
printf(" !
");
}else{
Del_i(H,i);
printf("6. :
The LinkNode elem is:");
print(H);
}
count = Length_LinkList(H);
printf("8. :%d
",count);
return 0;
}
転載先:https://www.cnblogs.com/tengpengfei/p/10454032.html