為了開發員工資訊管理系統,需要建立一個員工基礎資訊存盤結構,包括職工的編號、年齡和性別。把以上資訊用單向鏈表表達,要求如下。(1)構建員工基礎資訊的結構體節點,創建基于此節點的單向鏈表,初始化10個員工的資訊;(2)遍歷該鏈表,輸出全部職工資訊;(3)第3位員工離職了,請更新鏈表,并輸出剩余員工的資訊。
求大神幫幫忙,剛學單向鏈表實在搞不懂
uj5u.com熱心網友回復:
我用#CSDN#這個app發現了有技術含量的博客,小伙伴們求同去《C語言結構體與鏈表,單向鏈表構造,鏈表遍歷,鏈表元素查找,鏈表元素洗掉》, 一起來圍觀吧 https://blog.csdn.net/zhanghaiyang9999/article/details/114360628?utm_source=app&app_version=4.5.2uj5u.com熱心網友回復:
參考這個吧,鏈表操作,包括定義,創建,查找,洗掉等 https://blog.csdn.net/zhanghaiyang9999/article/details/114360628?utm_source=app&app_version=4.5.2uj5u.com熱心網友回復:
資料結構對單鏈表進行資料排序 http://bbs.csdn.net/topics/392201633uj5u.com熱心網友回復:
https://blog.csdn.net/u011238754/article/details/104839822?spm=1001.2014.3001.5501可以參照一下 把結構體成員加一下就好了
uj5u.com熱心網友回復:
簡單的鏈表,供參考:#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct data{
int num;
int age;
char sex;//M W
}Data;
typedef struct LNode{
Data data; //資料域
struct LNode *next; //指標域
}LNode,*LinkList; // LinkList為指向結構體LNode的指標型別
void LL_Initiate(LinkList &L); //單鏈表的初始化,構造一個帶頭結點的空的單鏈表
void LL_Free(LinkList &L);// 釋放鏈表中各個結點
void LL_Create_R(LinkList &L,int n);//尾插法,創建一個帶頭結點的單鏈表L
void LL_Print(LinkList L); // 輸出整個鏈表。
void LL_InsAt(LinkList L,int i);// 在單鏈表L中第i個位置插入新元素,i的取值范圍[1,n+1]
void LL_DelAt(LinkList L,int i);// 單鏈表L中,洗掉第i個元素,i的取值范圍[1,n]
void LL_DelValue(LinkList L, ElemType e);// 洗掉第一個值為e的資料元素
int main()
{
LinkList L;
int n,i,x;
LL_Initiate(L);//初始化構造一個帶頭結點的空的單鏈表
printf("請輸入員工的人數:\n");
scanf("%d",&n); //輸入元素的個數
LL_Create_R(L, n); //建立一個鏈表
printf("輸出全部員工資訊:\n");
LL_Print(L);
printf("請輸入待插入的位置:\n");
scanf("%d",&i);//輸入待插入的位置
LL_InsAt(L, i);
printf("\n");
LL_Print(L);
printf("請輸入待洗掉元素的位置:\n");
scanf("%d",&i); //輸入待洗掉元素的位置
LL_DelAt(L, i);
printf("\n");
LL_Print(L);
printf("請輸入離職的員工工號:\n");
scanf("%d", &x); //輸入待洗掉元素的值
LL_DelValue(L, x);
printf("\n");
LL_Print(L);
LL_Free(L);
return 0;
}
void LL_Initiate(LinkList &L)//構造一個帶頭結點的空的單鏈表
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
}
void LL_Free(LinkList &L)//釋放鏈表中各個結點
{
LinkList p=L->next,q;
while(1){
if (p==NULL)break;
q=p->next;
free(p);
p=q;
}
}
void LL_Create_R(LinkList &L,int n)//尾插法,創建一個帶頭結點的單鏈表L
{
LinkList r=L,s;
int i;
printf("輸入%d位員工資訊(工號 年齡 性別(M W)):\n",n);
for(i=0;i<n;i++)
{
s=(LinkList)malloc(sizeof(LNode)); //生成新結點
scanf("%d %d %c",&s->data.num,&s->data.age,&s->data.sex); //輸入元素值
s->next=NULL;
r->next=s; //插入到表尾
r=s; //r指向新的尾結點
}
}
void LL_Print(LinkList L)// 輸出整個線性表。
{
LinkList p;
p=L->next;
while(p){
printf("%d %d %c \n",p->data.num,p->data.age,p->data.sex);
p=p->next;
}
printf("\n");
}
void LL_InsAt(LinkList L,int i)//在單鏈表L中第i個位置插入新元素
{
LinkList s=L,p;
int k=0;
while(1){
if (s == NULL)break;
k++;
if (k==i){
p=(LinkList)malloc(sizeof(LNode));
printf("插入新員工資訊(工號 年齡 性別(M W)):\n");
scanf("%d %d %c",&p->data.num,&p->data.age,&p->data.sex);
p->next = s->next;
s->next = p;
break;
}
s=s->next;
}
}
void LL_DelAt(LinkList L,int i)// 在單鏈表L中,洗掉第i個元素
{
LinkList s=L,p;
int k=0;
while(1){
if (s==NULL)break;
k++;
if (k==i){
p=s->next;
if (p){
s->next=p->next;
free (p);
}
break;
}
s=s->next;
}
}
void LL_DelValue(LinkList L, ElemType e)// 洗掉第一個值為e的資料元素
{
int n;
LinkList p=L,s=NULL,q;
while(1){
if (p==NULL)break;
if (p->data.num == e){ //員工號
q=p;
if (q){
s->next=q->next;
free(q);
}
break;
}
s=p;
p=p->next;
}
}
//請輸入員工的人數:
//3
//輸入3位員工資訊(工號 年齡 性別(M W)):
//1 25 w
//2 27 m
//3 22 m
//輸出全部員工資訊:
//1 25 w
//2 27 m
//3 22 m
//請輸入待插入的位置:
//4
//插入新員工資訊(工號 年齡 性別(M W)):
//5 23 w
//1 25 w
//2 27 m
//3 22 m
//5 23 w
//請輸入待洗掉元素的位置:
//1
//2 27 m
//3 22 m
//5 23 w
//請輸入離職的員工工號:
//3
//2 27 m
//5 23 w
//請按任意鍵繼續. . .
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/270275.html
標籤:C++ 語言
上一篇:部分系統無法啟動應用程式
