單鏈表實現簡單通訊錄
阿新 • • 發佈:2019-02-19
今天寫了一個關於單鏈表的輸入輸出問題其中涉及到一些知識點自己原來沒見過,就想寫下來,怕自己忘了,也給大家一些啟發。
首先,今天寫這個是一個程式的一部分,是利用單鏈表寫一個簡單的通訊錄,實現插入、刪除、輸出三種操作,程式都是由小到大的,先把主體寫好即賦值、輸出等,後面的就是根據單鏈表的一些性質定義幾個函式就好;我的問題挺多的下面分點說吧,有幾點算幾點:
1. 首先是自己之前一直對char a[10]
和string a
搞不太懂,今天算是有點小收穫吧,這兩個的賦值都是用%s來定義型別的,只不過string是一個類,相當於c中的math一樣,但是char a[10]只是一個數組。
2. 在單鏈表賦值時會經常遇到需要無限輸入,即定義無限迴圈,其實利用已有的資料進行無限迴圈是最好的選擇,可以定義一個標量flag,即flag=scanf("%s",nam)
3. 建議新手儘量不要用vs,一個小白的簡單經驗之談。
以下為程式碼(只是單鏈表的輸入輸出)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedef struct stu
{
long long nmber;
char name[10];
struct stu *next;
}student;
student *init()
{
return NULL;
}
student *get_num(student *head)
{
int flag; //標量
head=(student*)malloc(sizeof(student));
student *q,*p=head;
p->next=NULL;
printf("請輸入第一個同學的資料(姓名、手機號)\n");
char nam[10]; //定義另一個字元陣列,用來存放輸入的字母,如果輸入有誤,
//就不傳給連結串列中的name,起到保護作用。
int i=2;
flag=scanf("%s",nam);
while(1)
{
scanf("%lld",&p->nmber);
strcpy(p->name,nam);
printf("請輸入第%d個同學的資訊:\n",i++);
flag=scanf("%s",nam);
if(flag==1) //定義一個迴圈判斷輸入是否有誤,決定是否繼續輸入。
{
q=(student*)malloc(sizeof(student));
q->next=NULL;p->next=q;p=q;
}
else break;
}
return head;
}
void display(student *head)
{
student *p=head;
if(!p)
{
printf("連結串列為空!\n");
exit(1);
}
else
while(p)
{
printf("%-20s %-12lld\n",p->name,p->nmber); //-20等為了對齊,純屬美觀。
p=p->next;
}
}
void main()
{
student *head=init();
head=get_num(head);
display(head);
}