日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

链表线性表及其操作c语言代码大全,用链表实现线性表的各种操作(C语言)

發布時間:2025/4/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链表线性表及其操作c语言代码大全,用链表实现线性表的各种操作(C语言) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#include

# include

# include

//定義節點結構體

typedef struct Node

{

int data;//數據域

struct Node * pNext;//指針域

}NODE,* PNODE;

//函數聲明

PNODE create_list(void); //創建鏈表

void traverse_list(PNODE pHead);//遍歷鏈表

bool is_empty(PNODE pHead);//判斷鏈表是否為空

int length_list(PNODE);//計算鏈表的長度

bool insert_list(PNODE, int, int);//插入數據

bool delete_list(PNODE, int, int *);//刪除數據

void sort_list(PNODE); //鏈表排序

int main(void)

{

PNODE pHead=create_list();

traverse_list(pHead);

// printf("%d\n",length_list(pHead));

//insert_list(pHead,3 ,100);

//traverse_list(pHead);

// int val;

// delete_list(pHead,2,&val);

//traverse_list(pHead);

sort_list(pHead);

traverse_list(pHead);

return 0;

}

//創建鏈表函數實現

PNODE create_list(void)

{

int len;//存放有效節點的個數

int i;

int val ; //臨時存放用回輸入的節點的值

//創建頭結點

PNODE pHead =(PNODE)malloc(sizeof(NODE));

if(NULL==pHead)

{

printf("分配內存失敗,程序終止\n");

exit(-1);

}

PNODE pTail = pHead;//定義一個臨時指針始終指向最后一個節點,輔助指針思想方法

pTail->pNext=NULL;

printf("請輸入要生成的節點的個數:len=");

scanf("%d",&len);

for(i=0;i

{

printf("請輸入第%d個節點的值:",i+1);

scanf("%d",&val);

PNODE pNew=(PNODE)malloc(sizeof(NODE));

if(NULL==pNew)

{

printf("分配失敗,程序終止\n");

exit(-1);

}

pNew->data=val;

pTail->pNext=pNew;

pNew->pNext=NULL;

pTail=pNew;//注意點 pTail要移動

}

return pHead;

}

//遍歷鏈表

void traverse_list(PNODE pHead)

{

PNODE p = pHead->pNext;

while (NULL != p)

{

printf("%d ", p->data);

p = p->pNext;

}

printf("\n");

return;

}

bool is_empty(PNODE pHead)//判斷鏈表是否為空

{

if(NULL==pHead->pNext)

return true;

else

return false;

}

//計算鏈表的長度

int length_list(PNODE pHead)

{

int i=0;

PNODE p=pHead->pNext;

while(NULL!=p)

{

i++;

p=p->pNext;

}

return i;

}

//插入數據

bool insert_list(PNODE pHead , int pos , int val)

{

PNODE p=pHead;

if(pos>0&&pos<=(length_list(pHead)+1))

{

for(int i=0;i

{

p=p->pNext;

}

PNODE pNew = (PNODE)malloc(sizeof(NODE));

pNew->data=val;

PNODE temp=p->pNext;

p->pNext=pNew;

pNew->pNext=temp;

return true;

}

else

{

return false;

}

}

//刪除數據

bool delete_list(PNODE pHead,int pos ,int *pVal)

{

PNODE p=pHead;

if(pos>0&&pos<=(length_list(pHead)))

{

for(int i=1;i

{

p=p->pNext;

}

PNODE temp=p->pNext->pNext;

*pVal=p->pNext->data;

p->pNext=temp;

return true;

}

else

{

return false;

}

}

//鏈表排序

void sort_list(PNODE pHead)

{

PNODE p=pHead;

for(p=pHead->pNext;p!=NULL;p=p->pNext)

{

for(PNODE q=p->pNext;q!=NULL;q=q->pNext)

{

if(q->datadata)

{

int temp=p->data;

p->data=q->data;

q->data=temp;

}

}

}

}

排序還可以用這種算法

void sort_list(PNODE pHead)

{

int i, j, t;

int len = length_list(pHead);

PNODE p, q;

for (i=0,p=pHead->pNext; ipNext)

{

for (j=i+1,q=p->pNext; jpNext)

{

if (p->data > q->data) //類似于數組中的: a[i] > a[j]

{

t = p->data;//類似于數組中的: t = a[i];

p->data = q->data; //類似于數組中的: a[i] = a[j];

q->data = t; //類似于數組中的: a[j] = t;

}

}

}

return;

}

數據插入還可用這種算法

bool insert_list(PNODE pHead, int pos, int val)

{

int i = 0;

PNODE p = pHead;

while (NULL!=p && i

{

p = p->pNext;

++i;

}

if (i>pos-1 || NULL==p)

return false;

PNODE pNew = (PNODE)malloc(sizeof(NODE));

if (NULL == pNew)

{

printf("動態分配內存失敗!\n");

exit(-1);

}

pNew->data = val;

PNODE q = p->pNext;

p->pNext = pNew;

pNew->pNext = q;

return true;

}

數據刪除還可用這種算法

bool delete_list(PNODE pHead, int pos, int * pVal)

{

int i = 0;

PNODE p = pHead;

while (NULL!=p->pNext && i

{

p = p->pNext;

++i;

}

if (i>pos-1 || NULL==p->pNext)

return false;

PNODE q = p->pNext;

*pVal = q->data;

//刪除p節點后面的結點

p->pNext = p->pNext->pNext;

free(q);

q = NULL;

return true;

}

總結

以上是生活随笔為你收集整理的链表线性表及其操作c语言代码大全,用链表实现线性表的各种操作(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。