根據(jù)開發(fā)經(jīng)驗,一般對數(shù)據(jù)的操作也就是**增刪改查。**最多外加幾個初始化賦值函數(shù)。
所有的i都是從第0個開始。這里的“改”沒有
這里定義了單鏈表結構體;兩種初始化函數(shù)(帶頭結點和不帶頭結點)。
初始化鏈表函數(shù)是為了防止內存區(qū)域中存在臟數(shù)據(jù)。
#include#includetypedef struct LNode{int data;
struct LNode *next;
}LNode,*LinkList;
//零、初始化
bool InitList(LinkList &L){//帶頭
L = NULL;
return true;
}
bool InitListHead(LinkList &L){//不帶頭
L = (LNode *) malloc(sizeof(LNode));//分配頭結點
if(L == NULL)// 初始化失敗
return false;
L->next =NULL;// 頭結點后續(xù)初始化為空
return true;
}
然后是插入節(jié)點的函數(shù)一共是三種插入
1.帶頭結點的后繼插入
2.無頭節(jié)點后繼插入
3.前驅插入
bool ListInsertHead(LinkList &L,int i,int e){//(帶頭結點)在第i個位置插入元素e
if(i<1){printf ("插入失敗 \n");
return false;
}
LNode *p;
int j=0;
p = L;//p指向頭節(jié)點
while(p!=NULL && jp = p->next;
j++;//當前p指向第幾個節(jié)點
}
if(p==NULL){//i值不合法
printf ("插入失敗 \n");
return false;
}
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
printf ("插入成功,插入節(jié)點序號為%d,插入數(shù)據(jù)為%d\n",j,e);
return true;
}
bool ListInsert(LinkList &L,int i,int e){//(無頭)在第i個位置插入元素e
if(i<1){printf ("插入失敗 \n");
return false;
}
if(i==1){//插入第一個節(jié)點
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = L;
L = s; //頭指針指向新插入的第一個節(jié)點
return true;
}
LNode *p;
int j=0;
p = L;//p指向頭節(jié)點
while(p!=NULL && jp = p->next;
j++;//當前p指向第幾個節(jié)點
}
if(p==NULL){//i值不合法
printf ("i值不合法,插入失敗 \n");
return false;
}
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
printf ("插入成功 \n");
return true;
}
bool InsertPriorNode(LNode *p,int e){//在p節(jié)點之前插入節(jié)點
if(p==NULL){//選擇節(jié)點為空
printf ("選擇節(jié)點為空,插入失敗 \n");
return false;
}
LNode *s =(LNode *)malloc(sizeof(LNode));
s->next = p->next;
p->next = s;
s->data = p->data;
p->data = e;
printf ("前插成功,插入數(shù)據(jù)為%d \n",e);
return true;
}
刪除函數(shù)1.刪除第i個位置的節(jié)點
int ListDelete(LinkList &L,int i,int &e){//刪除指定第i個節(jié)點
if(i<1){printf ("i值有誤,刪除失敗 \n");
return false;
}
LNode *p;
int j=0;
p = L;//p指向頭節(jié)點
while(p!=NULL && jp = p->next;
j++;//當前p指向第i-1個節(jié)點
}
if(p->next == NULL){e = p->data;
free(p);
printf ("刪除成功,刪除節(jié)點序號為%d,刪除數(shù)據(jù)為%d\n",++j,e);
}
if(p==NULL){//i值不合法
printf ("刪除失敗 \n");
return false;
}
LNode *s = p->next;
e = s->data;
p->next = s->next;
free(s);
printf ("刪除成功,刪除節(jié)點序號為%d,刪除數(shù)據(jù)為%d\n",++j,e);
return e;
}
bool DeleteNode(LNode *p){if(p==NULL){//選擇節(jié)點為空
printf ("選擇節(jié)點為空,插入失敗 \n");
return false;
}
if(p->next == NULL){free(p);
printf ("刪除成功\n");
}
LNode *q = p->next; //新建q指向待刪除節(jié)點p的后繼
p->data = q->data;//p的后繼值付給p
p->next = q->next;//p指向p的后繼
free(q);//釋放q
return true;
}
查找函數(shù)int selectElem(LinkList &L,int data){//返回和data相等的位置i
LinkList T=L;
int i=0;
while (T->next) {if (T->data == data) {return i;
}
T=T->next;
if (T->data == data) {return ++i;
}
i++;
}
return 2333;
}
int selectAllHead(LinkList L){//遍歷
if(L == NULL)
return 2333;
LinkList T=L;
int i=0;
while (T) {printf("第%d->%d\n",i,T->data);
T=T->next;
i++;
}
return 1;
}
改就是查到之后賦個值。
直接跑的全部代碼#include#include#define max 10
typedef struct LNode{int data;
struct LNode *next;
}LNode,*LinkList;
void text (int &x ){x=100;
}
//零、初始化
bool InitList(LinkList &L){L = NULL;
printf ("初始化成功 \n");
return true;
}
bool InitListHead(LinkList &L){L = (LNode *) malloc(sizeof(LNode));//分配頭結點
if(L == NULL){// 初始化失敗
printf ("初始化失敗 \n");
return false;
}
L->next =NULL;// 頭結點后續(xù)初始化為空
printf ("初始化成功 \n");
return true;
}
//一、增
bool ListInsertHead(LinkList &L,int i,int e){//(帶頭結點)在第i個位置插入元素e
if(i<1){printf ("插入失敗 \n");
return false;
}
LNode *p;
int j=0;
p = L;//p指向頭節(jié)點
while(p!=NULL && jp = p->next;
j++;//當前p指向第幾個節(jié)點
}
if(p==NULL){//i值不合法
printf ("插入失敗 \n");
return false;
}
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
printf ("插入成功,插入節(jié)點序號為%d,插入數(shù)據(jù)為%d\n",j,e);
return true;
}
bool ListInsert(LinkList &L,int i,int e){//(無頭)在第i個位置插入元素e
if(i<1){printf ("插入失敗 \n");
return false;
}
if(i==1){//插入第一個節(jié)點
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = L;
L = s; //頭指針指向新插入的第一個節(jié)點
return true;
}
LNode *p;
int j=0;
p = L;//p指向頭節(jié)點
while(p!=NULL && jp = p->next;
j++;//當前p指向第幾個節(jié)點
}
if(p==NULL){//i值不合法
printf ("i值不合法,插入失敗 \n");
return false;
}
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
printf ("插入成功 \n");
return true;
}
bool InsertPriorNode(LNode *p,int e){//在p節(jié)點之前插入節(jié)點
if(p==NULL){//選擇節(jié)點為空
printf ("選擇節(jié)點為空,插入失敗 \n");
return false;
}
LNode *s =(LNode *)malloc(sizeof(LNode));
s->next = p->next;
p->next = s;
s->data = p->data;
p->data = e;
printf ("前插成功,插入數(shù)據(jù)為%d \n",e);
return true;
}
//二、刪
int ListDelete(LinkList &L,int i,int &e){//刪除指定第i個節(jié)點
if(i<1){printf ("i值有誤,刪除失敗 \n");
return false;
}
LNode *p;
int j=0;
p = L;//p指向頭節(jié)點
while(p!=NULL && jp = p->next;
j++;//當前p指向第i-1個節(jié)點
}
if(p->next == NULL){e = p->data;
free(p);
printf ("刪除成功,刪除節(jié)點序號為%d,刪除數(shù)據(jù)為%d\n",++j,e);
}
if(p==NULL){//i值不合法
printf ("刪除失敗 \n");
return false;
}
LNode *s = p->next;
e = s->data;
p->next = s->next;
free(s);
printf ("刪除成功,刪除節(jié)點序號為%d,刪除數(shù)據(jù)為%d\n",++j,e);
return e;
}
bool DeleteNode(LNode *p){if(p==NULL){//選擇節(jié)點為空
printf ("選擇節(jié)點為空,插入失敗 \n");
return false;
}
if(p->next == NULL){free(p);
printf ("刪除成功\n");
}
LNode *q = p->next; //新建q指向待刪除節(jié)點p的后繼
p->data = q->data;//p的后繼值付給p
p->next = q->next;//p指向p的后繼
free(q);//釋放q
return true;
}
//三、改
int UpdateElem(LinkList &L,int i,int e){//將第i個節(jié)點的數(shù)據(jù)改為e
LinkList T=L;
LNode *p;
int j=0;
p = L;//p指向頭節(jié)點
while(p!=NULL && jp = p->next;
j++;//當前p指向第i-1個節(jié)點
}
if(p->next == NULL){printf ("更新失敗\n");
return 2333;
}
p->next->data = e;
printf ("更新成功\n");
return 2333;
}
//四、查
int selectElem(LinkList &L,int data){//返回和data相等的位置i
LinkList T=L;
int i=0;
while (T->next) {if (T->data == data) {return i;
}
T=T->next;
if (T->data == data) {return ++i;
}
i++;
}
return 2333;
}
int selectAllHead(LinkList L){//遍歷
if(L == NULL)
return 2333;
LinkList T=L;
int i=0;
while (T) {printf("第%d->%d\n",i,T->data);
T=T->next;
i++;
}
return 1;
}
int main()
{int i = 1;
int e = 10;
int num[3] = {1,2,3};
LinkList L;
InitListHead(L);//帶頭結點初始化
ListInsertHead(L,i,e);//插入第一個節(jié)點
for(int j=0;j<3;j++){ListInsertHead(L,i+j+1,num[j]);//在i后面插入第j+1個節(jié)點
}
LNode *p=L->next->next;
InsertPriorNode(p,e+1);//插入第2個位置,值為11
LNode *q=L->next;
InsertPriorNode(q,e+3);//選擇第一1結點前插
selectAllHead(L);//遍歷鏈表
int se = selectElem(L,3);//查找特定值
printf ("%d\n",se);
UpdateElem(L,3,se+100);
selectAllHead(L);
int ld = ListDelete(L,6,se);//刪除第6的節(jié)點
printf ("被刪除值為%d\n",ld);
selectAllHead(L);
return 0;
}
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當前題目:考研408數(shù)據(jù)結構代碼練習(C語言)——單鏈表部分-創(chuàng)新互聯(lián)
新聞來源:http://jinyejixie.com/article24/dcjdce.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗、標簽優(yōu)化、虛擬主機、移動網(wǎng)站建設、Google、云服務器
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容