鏈表是一種常見的重要的數據結構。它是動態地進行存儲分配的一種結構。它可以根據需要開辟內存單元。鏈表有一個“頭指針”變量,以head表示,它存放一個地址。該地址指向一個元素。鏈表中每一個元素稱為“結點”,每個結點都應包括兩個部分:
一為用戶需要用的實際數據,二為下一個結點的地址。因此,head指向第一個元素:第一個元素又指向第二個元素;……,直到最后一個元素,該元素不再指向其它元素,它稱為“表尾”,它的地址部分放一個“NULL”(表示“空地址”),鏈表到此結束。
鏈表的各類操作包括:學習單向鏈表的創建、刪除、 插入(無序、有序)、輸出、 排序(選擇、插入、冒泡)、反序等等。
基本操作
1. 節點的構造
#include
#include
#include
#defineLEN sizeof(struct stu)structstu{
//數據char num[10];char name[20];float score;
//指針structstu*next;};
2. 建立鏈表
struct stu *create(){
/structstu*head;structstu*p1, *p2;
head = (struct stu *)malloc(LEN); head->next =NULL;
p1 = head;
p2 = (struct stu *)malloc(LEN);
printf("輸入個人信息:學籍號、姓名和總成績\n");
scanf("%s%s%f",p2->num, p2->name, &p2->score); getchar();
while(strcmp(p2->num,"0") !=0){/*
執行結束后
1。p2的next域為NULL.
2。第一個節點的next域指向第二個節點的數據域
3。p1指針指向第二個節點的數據域
p2->next = p1->next; p1->next = p2; p1 = p2;
p2 = (struct stu *)malloc(LEN);printf("輸入個人信息:學籍號、姓名和總成績\n");
scanf("%s%s%f",p2->num, p2->name, &p2->score); getchar(); }
free(p2);returnhead;};
3. 輸出鏈表
void print(struct stu * head){structstu*p;
printf("num name score\n"); p = head->next;
while(p!=NULL){
printf("%-10s %-20s %-4.1f\n",p->num, p->name, p->score);
p=p->next; }}
4. 插入節點
void insert(struct stu * head, struct stu * p0)
{ struct stu *p1, *p2; p1 = head->next;p2 = head;
while((p1!=NULL) && (strcmp(p0->num, p1->num)==1))
{p2=p1; p1=p1->next; } p0->next = p2->next; p2->next = p0;}
5. 刪除節點
int delete(struct stu *head,charnum[]){ structstu*p1, *p2;p1 = head->next; p2 = head;
while(p1!=NULL&&strcmp(num, p1->num)!=0)
{ p2=p1; p1=p1->next; }
if(!p1){return0; }
p2->next = p1->next;free(p1);return1;}
6. 主函數
//主函數int main()
{structstu*h, *p0;charnum[10];printf("建立鏈表\n");
h = create(); p0 = (struct stu *)malloc(LEN);
printf("輸入待插入的個人信息:學籍號、姓名和總成績\n");
scanf("%s%s%f",p0->num, p0->name, &p0->score);
getchar();if(strcmp(p0->num,"0") !=0){ insert(h, p0); }
printf("輸入待刪除個人信息的學號\n");
scanf("%s",num);if(strcmp(num,"0") !=0){delete(h, num);
}printf("輸出鏈表\n"); print(h);return0;}鄭州不孕不育醫院http://jbk.39.net/yiyuanzaixian/zztjyy/