二重の二重の重の針のチェーンは電子科の主要な部分を実現して法の最後に挿し込みます.
24122 ワード
今日は二重針のチェーンを書きました.つまり、針の針は構造体のアドレスを針で記憶し、二重のポインタでアドレスを格納します.ここのコードには多くのコメントコードが追加されています.
#include
#include
typedef enum Status{
success,fail,fatal,range_error
} Status;
typedef struct node{ //
int elem;
struct node* next;
} Node, * Ptr;
typedef Ptr* sqlistptr; // int a=10,int *p=&a,int **q=&p
// struct node **sqlistptr//*q=p,**q=a
Status List_Init(sqlistptr L){ //
Status s = fatal;
(*L) = (Ptr)malloc(sizeof(Node));
if(*L){
(*L)->next = NULL;
s = success;
}
return s;
}
Status List_HICreate(sqlistptr L,int date[],int len){
Status s;
Ptr new; // ( )
int i;
s = List_Init(L);
if (s == success){
for(i=len-1;i>=0;i--){
new = (Ptr)malloc(sizeof(Node));
if(new){
new->elem = date[i];
new->next = (*L)->next;
(*L)->next = new;
}
else {
s=fail; break;
}
}
}
}
Status List_RICreate(sqlistptr L,int date[],int len ){ //
Status s;
Ptr new,curr;
int i;
s = List_Init(L);
curr = *L;
if (s == success){
for(i=len-1;i>=0;i--){
new = (Ptr)malloc(sizeof(Node));
if(new){
new->elem = date[i];
new->next = curr->next;
curr->next = new;
curr = new; //
}
else {
s=fail;
break;
}
}
}
}
Status List_Retrieve(sqlistptr L,int pos,int *elem)//
{
Status s=range_error;
Ptr p = (*L)->next;
int i=1;
while(i < pos && p){
i++;
p=p->next;
}
if(i == pos){
*elem = p->elem;
s = success;
}
return s;
}
Status List_Retrival(sqlistptr L,int pos,sqlistptr elem)//
{
Status s = range_error;
int i=0,j;
Ptr p = (*L);
while(p && i<pos){
i++;
p = p->next;
}
if(p && i==pos){
*elem = p;
s = success;
}
return s;
}
Status List_Insert(sqlistptr L,int pos,int elem)
{
Status st;
Ptr p,s;
st=List_Retrival(L,pos-1,&p);
if (st==success){
s=(Ptr)malloc(sizeof(Node));
if(s){
s->elem=elem;
s->next=p->next;
p->next=s;
st=success;
}
else st = fatal;
}
else st = range_error;
}
Status List_Delate(sqlistptr L,int pos){
Status k=fail;
Ptr s,p;
k= List_Retrival(L,pos-1,&p);
if(k == success){
s = p->next;
p->next = s->next;
free(s);
s = NULL;
k = success;
}
return k;
}
void print(sqlistptr L){
Ptr p=(*L);
while(p->next!=NULL){
p = p->next; //
printf("%d",p->elem);
}
}
int main()
{
Ptr Q;
int elem[100],n,i,j,pos;
printf(" : ");
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&elem[i]);
}
List_Init(&Q);
List_HICreate(&Q,elem,n);//
//List_RICreate(&Q,elem,n);//
//List_Retrieve(sqlistptr L,int pos,int *elem)//
scanf("%d %d",&pos,&j);
List_Insert(&Q,pos,j);
print(&Q);
return 0;
}