網上有很多關于pos機提示連接通訊錄,一起學習單鏈表的操作方法的知識,也有很多人為大家解答關于pos機提示連接通訊錄的問題,今天pos機之家(www.shbwcl.net)為大家整理了關于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機提示連接通訊錄
發現大部分的文章對于鏈表的基本方法講述很模糊,今天我為大家根據這個“通訊錄”仔細講解一下鏈表的的操作。
第一步:定義頭文件
#include<stdio.h>#include<stdlib.h>#include<io.h>#include<windows.h> //清屏操作#include<malloc.h> //動態分配內存
第二步:定義結構體指針變量
typedef struct Node{char id[30]; //用戶ID char name[30]; //用戶姓名 char nex[10]; //用戶性別 char number[30]; //用戶電話號碼 char birthday[30]; //用戶生日 char address[30]; //用戶家庭地址 struct Node *Next; //指針域 }Stu,*PStu;
結構體指針分為數據域和指針域,定義你所需要的相關變量。借用typedef進行一個改名字的操作,使得調用時候更加簡潔方便,不易出錯 !
本人比較喜歡把頭節點單獨用函數的方式寫出來,這樣調用比較方便
PStu createlist() {PStu headNode = (PStu)malloc(sizeof(Stu)); headNode -> Next = NULL;return headNode;}
動態的開辟內存空間,把頭節點的下一個指向空指針,返回頭節點的地址。
接下來就是幾個基本操作
1.增添信息(頭插法)
void addNode(PStu headNode){PStu head = (PStu)malloc(sizeof(Stu));printf("請輸入ID:");scanf("%s",head->id);printf("請輸入姓名:");scanf("%s",head->name);printf("請輸入性別:");scanf("%s",head->nex);printf("請輸入電話號碼:");scanf("%s",head->number);printf("請輸入生日:");scanf("%s",head->birthday);printf("請輸入地址:");scanf("%s",head->address);head->Next = headNode->Next ;headNode->Next = head; }
尾插法
void endNode(PStu headNode){PStu temp = headNode;while(temp){temp = temp ->Next ; }if(temp){PStu s = (PStu)malloc(sizeof(Stu));temp->Next = s;temp = s;printf("請輸入ID:");scanf("%s",s->id);printf("請輸入姓名:");scanf("%s",s->name);printf("請輸入性別:");scanf("%s",s->nex);printf("請輸入電話號碼:");scanf("%s",s->number);printf("請輸入生日:");scanf("%s",s->birthday);printf("請輸入地址:");scanf("%s",s->address);temp ->Next = NULL; }}
這兩種方法在我的上上篇文章中有詳細講解,不會的同學們可以去看看。
2.刪除信息(借助姓名進行一個刪除的操作)
void delectNode(PStu headNode,char *name){ PStu posNode = headNode->Next ; PStu posfrontNode = headNode; if(posNode == NULL) { printf("該鏈表為空"); return ; } else { while(strcmp(posNode->name,name)) { posfrontNode = posNode; posNode = posNode->Next; if(posNode == NULL) { printf("不存在該數據,無法刪除!"); return; } } posfrontNode->Next = posNode->Next ; free(posNode); } }
3.修改信息
首先根據自己的需要找到想要刪除的位置(遍歷鏈表),然后進行一個換值操作(char類型的要用strcpy進行賦值,int 類型用“=”進行一個賦值)
PStu gai(PStu headNode){PStu p = headNode; char address_[30]; char number_[20]; char id_[15]; char nex_[4]; int a,i;char birthday_[20],name_[20];printf("你想修改哪一位的相關信息:");scanf("%d",&a);getchar();for(i = 1;i <= a;i++) //遍歷鏈表{p = p->Next;}printf("請選擇你要更改的信息 :\");printf("A.ID B.姓名 C.性別 D.電話號碼 E.生日 F.地址 \"); char w = getchar(); getchar(); if(w == 'A'||w == 'a'){int id;printf("請輸入修改后的ID:");scanf("%s",id_);getchar();strcpy(p->id,id_);}if(w == 'B' || w == 'b'){printf("請輸入修改后的姓名:");scanf("%s",name_);getchar();strcpy(p->name,name_);}if(w == 'C'||w == 'c'){printf("請輸入修改后的性別:");scanf("%s",nex_);strcpy(p->nex,nex_);}if(w == 'D'||w == 'd'){printf("請輸入修改后的電話號碼:");scanf("%s",number_);strcpy(p->number,number_);}if(w == 'E'||w == 'e'){printf("請輸入修改后的生日:");scanf("%s",birthday_); strcpy(p->birthday,birthday_);}if(w == 'F'||w == 'f'){printf("請輸入修改后的地址:");scanf("%s",address_); strcpy(p->address,address_);}return p;}
這個代碼段我可以修改任意一組信息,借助一個簡單的if語句進行操作
4.查找信息
找到需要的信息,進行一個遍歷操作,找到后可以返回這個節點的地址,從而得到這個地址所有的相關信息
PStu reviseNode(PStu headNode,char *id) //借助ID進行查找{PStu head = headNode;while(head){if(strcmp(head->id,id)){head = head->Next;}elsebreak;}return head;}
5.遍歷信息
把每一個節點的所有數據都進行一個輸出,借用while遍歷鏈表
void printList(PStu headNode){PStu r = headNode->Next ;while(r){printf("%s %s %s %s %s %s\",r->id ,r->name ,r->nex ,r->number ,r->birthday ,r->address );r = r->Next; }}
6.排序信息(冒泡排序)
思路和方法和正常的數組排序一模一樣,只是將for循環的條件改為鏈表的操作(char類型的要用strcpy進行賦值,int 類型用“=”進行一個賦值)
void maopao(PStu headNode){PStu t;PStu u;char name_[30],id_[30],nex_[20],birthday_[30],number_[30],address_[30];for(t = headNode->Next;t!= NULL;t = t->Next) { for(u = headNode->Next;u->Next != NULL;u = u->Next) { if(strcmp(u->id , u->Next->id)>0) { strcpy(id_,u->id); strcpy(u->id,u->Next->id); strcpy(u->Next->id,id_); strcpy(name_,u->name); strcpy(u->name,u->Next->name); strcpy(u->Next->name,name_); strcpy(nex_,u->nex); strcpy(u->nex,u->Next->nex); strcpy(u->Next->nex,nex_); strcpy(number_,u->number); strcpy(u->number,u->Next->number); strcpy(u->Next->number,number_); strcpy(birthday_,u->birthday); strcpy(u->birthday,u->Next->birthday); strcpy(u->Next->birthday,birthday_); strcpy(address_,u->address); strcpy(u->address,u->Next->address); strcpy(u->Next->address,address_);} } }}
以下為相關部分操作的圖片:
以下為部分的代碼段:(我在主函數里面借用do-while循環進行循環操作,通過break進行退出循環)
#include<stdio.h>#include<stdlib.h>#include<io.h>#include<windows.h>#include<malloc.h>typedef struct Node{char id[30]; //用戶ID char name[30]; //用戶姓名 char nex[10]; //用戶性別 char number[30]; //用戶電話號碼 char birthday[30]; //用戶生日 char address[30]; //用戶家庭地址 struct Node *Next; //指針域 }Stu,*PStu;void menu(){printf("\\--------小艾通訊錄-------");printf("\\\1.增添信息");printf("\\\2.刪除信息");printf("\\\3.查找信息");printf("\\\4.修改信息");printf("\\\5.顯示信息"); printf("\\\6.排序信息"); //借助ID進行排序 printf("\\\7.退出系統"); }PStu createlist() {PStu headNode = (PStu)malloc(sizeof(Stu)); headNode -> Next = NULL;return headNode;}void addNode(PStu headNode){PStu head = (PStu)malloc(sizeof(Stu));printf("請輸入ID:");scanf("%s",head->id);printf("請輸入姓名:");scanf("%s",head->name);printf("請輸入性別:");scanf("%s",head->nex);printf("請輸入電話號碼:");scanf("%s",head->number);printf("請輸入生日:");scanf("%s",head->birthday);printf("請輸入地址:");scanf("%s",head->address);head->Next = headNode->Next ;headNode->Next = head; }void endNode(PStu headNode){PStu temp = headNode;while(temp){temp = temp ->Next ; }if(temp){PStu s = (PStu)malloc(sizeof(Stu));temp->Next = s;temp = s;printf("請輸入ID:");scanf("%s",s->id);printf("請輸入姓名:");scanf("%s",s->name);printf("請輸入性別:");scanf("%s",s->nex);printf("請輸入電話號碼:");scanf("%s",s->number);printf("請輸入生日:");scanf("%s",s->birthday);printf("請輸入地址:");scanf("%s",s->address);temp ->Next = NULL; }}void printList(PStu headNode){PStu r = headNode->Next ;while(r){printf("%s %s %s %s %s %s\",r->id ,r->name ,r->nex ,r->number ,r->birthday ,r->address );r = r->Next; }}void delectNode(PStu headNode,char *name){ PStu posNode = headNode->Next ; PStu posfrontNode = headNode; if(posNode == NULL) { printf("該鏈表為空"); return ; } else { while(strcmp(posNode->name,name)) { posfrontNode = posNode; posNode = posNode->Next; if(posNode == NULL) { printf("不存在該數據,無法刪除!"); return; } } posfrontNode->Next = posNode->Next ; free(posNode); } }PStu reviseNode(PStu headNode,char *id){PStu head = headNode;while(head){if(strcmp(head->id,id)){head = head->Next;}elsebreak;}return head;}PStu gai(PStu headNode){PStu p = headNode; char address_[30]; char number_[20]; char id_[15]; char nex_[4]; int a,i;char birthday_[20],name_[20];printf("你想修改哪一位的相關信息:");scanf("%d",&a);getchar();for(i = 1;i <= a;i++){p = p->Next;}printf("請選擇你要更改的信息 :\");printf("A.ID B.姓名 C.性別 D.電話號碼 E.生日 F.地址 \"); //getchar(); char w = getchar(); getchar(); if(w == 'A'||w == 'a'){int id;printf("請輸入修改后的ID:");scanf("%s",id_);getchar();strcpy(p->id,id_);}if(w == 'B' || w == 'b'){printf("請輸入修改后的姓名:");scanf("%s",name_);getchar();strcpy(p->name,name_);}if(w == 'C'||w == 'c'){printf("請輸入修改后的性別:");scanf("%s",nex_);strcpy(p->nex,nex_);}if(w == 'D'||w == 'd'){printf("請輸入修改后的電話號碼:");scanf("%s",number_);strcpy(p->number,number_);}if(w == 'E'||w == 'e'){printf("請輸入修改后的生日:");scanf("%s",birthday_); strcpy(p->birthday,birthday_);}if(w == 'F'||w == 'f'){printf("請輸入修改后的地址:");scanf("%s",address_); strcpy(p->address,address_);}return p;}void maopao(PStu headNode){PStu t;PStu u;char name_[30],id_[30],nex_[20],birthday_[30],number_[30],address_[30];for(t = headNode->Next;t!= NULL;t = t->Next) { for(u = headNode->Next;u->Next != NULL;u = u->Next) { if(strcmp(u->id , u->Next->id)>0) { strcpy(id_,u->id); strcpy(u->id,u->Next->id); strcpy(u->Next->id,id_); strcpy(name_,u->name); strcpy(u->name,u->Next->name); strcpy(u->Next->name,name_); strcpy(nex_,u->nex); strcpy(u->nex,u->Next->nex); strcpy(u->Next->nex,nex_); strcpy(number_,u->number); strcpy(u->number,u->Next->number); strcpy(u->Next->number,number_); strcpy(birthday_,u->birthday); strcpy(u->birthday,u->Next->birthday); strcpy(u->Next->birthday,birthday_); strcpy(address_,u->address); strcpy(u->address,u->Next->address); strcpy(u->Next->address,address_);} } }}
以上就是關于pos機提示連接通訊錄,一起學習單鏈表的操作方法的知識,后面我們會繼續為大家整理關于pos機提示連接通訊錄的知識,希望能夠幫助到大家!









