鏈表的c語言實現(三)

來源:互聯網
上載者:User

二、單鏈表的基本運算
建立了一個單鏈表之後,如果要進行一些如插入、刪除等操作該怎麼辦?所以還須掌握一些單鏈表的基本演算法,來實現這些操作。單鏈表的基本運算包括:尋找、插入和刪除。下面我們就一一介紹這三種基本運算的演算法,並結合我們建立單鏈表的例子寫出相應的程式。
1、尋找
對單鏈表進行尋找的思路為:對單鏈表的結點依次掃描,檢測其資料域是否是我們所要查好的值,若是返回該結點的指標,否則返回NULL。
因為在單鏈表的鏈域中包含了後繼結點的儲存地址,所以當我們實現的時候,只要知道該單鏈表的頭指標,即可依次對每個結點的資料域進行檢測。
以下是應用尋找演算法的一個例子:
#include <stdio.h>
#include <malloc.h>
#include <string.h> /*包含一些字串處理函數的標頭檔*/
#define N 10

typedef struct node
{
char name[20];
struct node *link;
}stud;

stud * creat(int n) /*建立鏈表的函數*/
{
stud *p,*h,*s;
int i;
if((h=(stud *)malloc(sizeof(stud)))==NULL)
{
printf("不能分配記憶體空間!");
exit(0);
}
h->name[0]='\0';
h->link=NULL;
p=h;
for(i=0;i<n;i++)
{
if((s= (stud *) malloc(sizeof(stud)))==NULL)
{
printf("不能分配記憶體空間!");
exit(0);
}
p->link=s;
printf("請輸入第%d個人的姓名",i+1);
scanf("%s",s->name);
s->link=NULL;
p=s;
}
return(h);
}

stud * search(stud *h,char *x) /*尋找鏈表的函數,其中h指標是鏈表的表頭指標,x指標是要尋找的人的姓名*/
{
stud *p; /*當前指標,指向要與所尋找的姓名比較的結點*/
char *y; /*儲存結點資料域內姓名的指標*/
p=h->link;
while(p!=NULL)
{
y=p->name;
if(strcmp(y,x)==0) /*把資料域裡的姓名與所要尋找的姓名比較,若相同則返回0,即條件成立*/
return(p); /*返回與所要尋找結點的地址*/
else p=p->link;
}
if(p==NULL)
printf("沒有尋找到該資料!");
}

main()
{
int number;
char fullname[20];
stud *head,*searchpoint; /*head是表頭指標,searchpoint是儲存合格結點地址的指標*/
number=N;
head=creat(number);
printf("請輸入你要尋找的人的姓名:");
scanf("%s",fullname);
searchpoint=search(head,fullname); /*調用尋找函數,並把結果賦給searchpoint指標*/
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.