單鏈表的各種操作

2021-05-25 06:47:57 字數 3339 閱讀 9661

/*單鏈表的各種操作*/

# define null 0

typedef char elemtype; /* 字元型資料*/

typedef struct lnode

elemtype data;

struct lnode *next;

setnull(struct lnode **p);

int length (struct lnode **p);

elemtype get(struct lnode **p,int i);

void insert(struct lnode **p,elemtype x,int i);

int delete(struct lnode **p,int i);

void display(struct lnode **p);

main()

struct lnode *head,*q;  /*定義靜態變數*/

int select,x1,x2,x3,x4;

int i,n; 

int m,g;

char e,y; 

head=setnull(&head);  /*建議鍊錶並設定為空表*/

printf("請輸入資料長度: ");

scanf("%d",&n);

for(i=1;iprintf("將資料插入到單鏈表中: ");

scanf("%d",&y);

insert(&head,y,i);}  /*插入資料到鍊錶*/

display(&head); /*顯示鍊錶所有資料*/

printf("select 1 求長度 length()/n");

printf("select 2 取結點 get()/n");

printf("select 3 求值查詢 locate()/n");

printf("select 4 刪除結點 delete()/n");

printf("input your select: ");

scanf("%d",&select);

switch(select)

case 1:

x1=length(&head);

printf("輸出單鏈表的長度%d ",x1);

display(&head);

}break;

case 2:

printf("請輸入要取得結點: ");

scanf("%d",&m);

x2=get(&head,m);

printf(x2);

display(&head);

}break;

case 3:

printf("請輸入要查詢的資料: ");

scanf("%d",&e);

x3=locate(&head,e);

printf(x3);

display(&head);

}break;

case 4:

printf("請輸入要刪除的結點: ");

scanf("%d",&g);

x4=delete(&head,g);

printf(x4);

display(&head);

}break;

setnull(struct lnode **p)

*p=null;

int length (struct lnode **p)

int n=0;

struct lnode *q=*p;

while (q!=null)

n++;

q=q->next;

return(n);

elemtype get(struct lnode **p,int i)

int j=1;

struct lnode *q=*p;

while (jq=q->next;

j++;

if(q!=null)

return(q->data);

else

printf("位置引數不正確!/n");

int locate(struct lnode **p,elemtype x)

int n=0;

struct lnode *q=*p;

while (q!=null&&q->data!=x)

q=q->next;

n++;

if(q==null)

return(-1);

else

return(n+1);

void insert(struct lnode **p,elemtype x,int i)

int j=1;

struct lnode *s,*q;

s=(struct lnode *)malloc(sizeof(struct lnode));

s->data=x;

q=*p;

if(i==1)

s->next=q;

p=s;

else

while(jnext!=null)

q=q->next;

j++;

if(j==i-1)

s->next=q->next;

q->next=s;

else 

printf("位置引數不正確!/n");

int delete(struct lnode **p,int i)

int j=1;

struct lnode *q=*p,*t;

if(i==1)

t=q;

*p=q->next;

else

while(jnext!=null)

q=q->next;

j++;

if(q->next!=null&&j==i-1)

t=q->next;

q->next=t->next;

else 

printf("位置引數不正確!/n");

if(t=null)

free(t);

void display(struct lnode **p)

struct lnode *q;

q=*p;

printf("單鏈表顯示: ");

if(q==null)

printf("鍊錶為空!");

else if (q->next==null)

printf("%c/n",q->data);

else

while(q->next!=null)

printf("%c->",q->data);

q=q->next;

printf("%c",q->data);

printf("/n");

單鏈表各種操作

終於自己寫出了關於單鏈表的操作,而不是看別人的,現在程式設計越來越有感覺了,自己編更好,別人的還看不懂,不知道他們的思路是什麼 單鏈表的建立,插入,刪除,排序,求長度。插入是按大小順序插入的。include include struct node void creat node void print...

單鏈表的各種操作

單鏈表的各種操作 define null 0 typedef char elemtype 字元型資料 typedef struct lnode setnull struct lnode p int length struct lnode p elemtype get struct lnode p,i...

單鏈表的各種操作

單鏈表的各種操作 define null 0 typedef char elemtype 字元型資料 typedef struct lnode setnull struct lnode p int length struct lnode p elemtype get struct lnode p,i...