真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語言實(shí)現(xiàn)鏈?zhǔn)胶瘮?shù)操作 C語言鏈表函數(shù)

如何用C語言創(chuàng)建一個(gè)鏈棧,并進(jìn)行操作

1 思路: 主要是鏈表的插入和刪除操作

創(chuàng)新互聯(lián)是專業(yè)的鶴崗網(wǎng)站建設(shè)公司,鶴崗接單;提供網(wǎng)站制作、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行鶴崗網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

2 代碼

#includestdio.h

#includestdlib.h

typedef?struct?node

{

int??data;

struct?node?*next;

}node_type;

void?push(node_type*?stack,?int?elem){

node_type*node?=?(node_type*)malloc(sizeof(node_type));

node-data?=?elem;

node-next?=?stack;

stack?=?node;

}

int?pop(node_type*?stack){

int?elem?=?stack-data;

node_type*node?=?stack;

stack?=?stack-next;

free(node);

return?elem;

}

bool?IsEmpty(node_type*?stack){

return?stack?==?NULL;

}

void?display(node_type*stack){

while?(stack){

printf("%d?",?stack-data);

stack?=?stack-next;

}

puts("");

}

void?destroy(node_type*stack){

while?(!IsEmpty(stack)){

pop(stack);

}

}

int?main(){

puts("(1)?建立空鏈棧");

node_type*stack?=?NULL;

puts("\n(2)?調(diào)用進(jìn)棧函數(shù),將從鍵盤輸入的數(shù)據(jù)元素逐個(gè)進(jìn)棧,輸入0結(jié)束;");

int?num;

scanf("%d",?num);

while?(num?!=?0){

push(stack,?num);

scanf("%d",?num);

}

puts("\n(3)?顯示進(jìn)棧后的數(shù)據(jù)元素");

display(stack);

puts("\n(4)?調(diào)用兩次出棧函數(shù),顯示出棧后的數(shù)據(jù)元素");

if?(!IsEmpty(stack))

printf("%d\n",?pop(stack));

if?(!IsEmpty(stack))

printf("%d\n",?pop(stack));

destroy(stack);

getchar();

getchar();

return?0;

}

3 運(yùn)行效果

c語言結(jié)構(gòu)體(鏈表)操作函數(shù)

if中可以賦值給head的理由很簡單。

因?yàn)?if(PTScount(head) == 0)

if判斷的就是看它是不是 第一個(gè)元素。

如果是第一個(gè)元素,自然直接將ins賦值給head。

head所代表的就是第一個(gè)元素。

如果到了else這里,那么很明顯就不是第一個(gè)元素了。

那這個(gè)時(shí)候肯定就不可以直接復(fù)制給head了呀,因?yàn)閔ead可是代表第一個(gè)元素呀。

所以,你這是肯定改不了的。

用c語言編程實(shí)現(xiàn)單鏈表的基本操作,有必要的類型說明,并完成下面函數(shù)的功能,

樓主你好

代碼具體如下:

#includestdio.h

#includestdlib.h

typedef struct node

{

char ch;

struct node *next;

}LinkList;

void CreatList(LinkList * h)

{

LinkList *p;

LinkList *r=h;//尾結(jié)點(diǎn) 開始指向頭結(jié)點(diǎn)

int i=0;

for(;i26;i++)

{

p=(LinkList *)malloc(sizeof(LinkList));

p-ch='a'+i;

r-next=p;

r=p;

}

r-next=NULL;

}

void ListTransfer(LinkList *h)

{

LinkList *p=h-next;

while(p)

{

(p-ch)-='a'-'A';

p=p-next;

}

}

void ListPrint(LinkList *h)

{

LinkList *p=h-next;

while(p)

{

putchar(p-ch);

p=p-next;

}

printf("\n");

}

int main()

{

LinkList *head;

head=(LinkList *)malloc(sizeof(LinkList));

CreatList(head);

printf("轉(zhuǎn)換前:\n");

ListPrint(head);

ListTransfer(head);

printf("轉(zhuǎn)換后:\n");

ListPrint(head);

return 0;

}

希望能幫助你哈

C語言鏈?zhǔn)奖碜钌賹憚?chuàng)建,查詢,插入,刪除,輸出這幾個(gè)功能 ;完整代碼

比你要求的要多很多

看注釋

#include?"stdio.h"

#include?stdlib.h

#include?"string.h"

typedef?int?elemType?;

/************************************************************************/

/*?????????????以下是關(guān)于線性表鏈接存儲(chǔ)(單鏈表)操作的18種算法????????*/

/*?1.初始化線性表,即置單鏈表的表頭指針為空?*/

/*?2.創(chuàng)建線性表,此函數(shù)輸入負(fù)數(shù)終止讀取數(shù)據(jù)*/

/*?3.打印鏈表,鏈表的遍歷*/

/*?4.清除線性表L中的所有元素,即釋放單鏈表L中所有的結(jié)點(diǎn),使之成為一個(gè)空表?*/

/*?5.返回單鏈表的長度?*/

/*?6.檢查單鏈表是否為空,若為空則返回1,否則返回0?*/

/*?7.返回單鏈表中第pos個(gè)結(jié)點(diǎn)中的元素,若pos超出范圍,則停止程序運(yùn)行?*/

/*?8.從單鏈表中查找具有給定值x的第一個(gè)元素,若查找成功則返回該結(jié)點(diǎn)data域的存儲(chǔ)地址,否則返回NULL?*/

/*?9.把單鏈表中第pos個(gè)結(jié)點(diǎn)的值修改為x的值,若修改成功返回1,否則返回0?*/

/*?10.向單鏈表的表頭插入一個(gè)元素?*/

/*?11.向單鏈表的末尾添加一個(gè)元素?*/

/*?12.向單鏈表中第pos個(gè)結(jié)點(diǎn)位置插入元素為x的結(jié)點(diǎn),若插入成功返回1,否則返回0?*/

/*?13.向有序單鏈表中插入元素x結(jié)點(diǎn),使得插入后仍然有序?*/

/*?14.從單鏈表中刪除表頭結(jié)點(diǎn),并把該結(jié)點(diǎn)的值返回,若刪除失敗則停止程序運(yùn)行?*/

/*?15.從單鏈表中刪除表尾結(jié)點(diǎn)并返回它的值,若刪除失敗則停止程序運(yùn)行?*/

/*?16.從單鏈表中刪除第pos個(gè)結(jié)點(diǎn)并返回它的值,若刪除失敗則停止程序運(yùn)行?*/

/*?17.從單鏈表中刪除值為x的第一個(gè)結(jié)點(diǎn),若刪除成功則返回1,否則返回0?*/

/*?18.交換2個(gè)元素的位置?*/

/*?19.將線性表進(jìn)行快速排序?*/

/************************************************************************/

typedef?struct?Node{????/*?定義單鏈表結(jié)點(diǎn)類型?*/

elemType?element;

struct?Node?*next;

}Node;

/*?1.初始化線性表,即置單鏈表的表頭指針為空?*/

void?initList(Node?**pNode)

{

*pNode?=?NULL;

printf("initList函數(shù)執(zhí)行,初始化成功\n");

}

/*?2.創(chuàng)建線性表,此函數(shù)輸入負(fù)數(shù)終止讀取數(shù)據(jù)*/

Node?*creatList(Node?*pHead)

{

Node?*p1;

Node?*p2;

p1=p2=(Node?*)malloc(sizeof(Node));?//申請(qǐng)新節(jié)點(diǎn)

if(p1?==?NULL?||?p2?==NULL)

{

printf("內(nèi)存分配失敗\n");

exit(0);

}

memset(p1,0,sizeof(Node));

scanf("%d",p1-element);????//輸入新節(jié)點(diǎn)

p1-next?=?NULL;?????????//新節(jié)點(diǎn)的指針置為空

while(p1-element??0)????????//輸入的值大于0則繼續(xù),直到輸入的值為負(fù)

{

if(pHead?==?NULL)???????//空表,接入表頭

{

pHead?=?p1;

}

else???????????????

{

p2-next?=?p1;???????//非空表,接入表尾

}

p2?=?p1;

p1=(Node?*)malloc(sizeof(Node));????//再重申請(qǐng)一個(gè)節(jié)點(diǎn)

if(p1?==?NULL?||?p2?==NULL)

{

printf("內(nèi)存分配失敗\n");

exit(0);

}

memset(p1,0,sizeof(Node));

scanf("%d",p1-element);

p1-next?=?NULL;

}

printf("creatList函數(shù)執(zhí)行,鏈表創(chuàng)建成功\n");

return?pHead;???????????//返回鏈表的頭指針

}

/*?3.打印鏈表,鏈表的遍歷*/

void?printList(Node?*pHead)

{

if(NULL?==?pHead)???//鏈表為空

{

printf("PrintList函數(shù)執(zhí)行,鏈表為空\n");

}

else

{

while(NULL?!=?pHead)

{

printf("%d?",pHead-element);

pHead?=?pHead-next;

}

printf("\n");

}

}

/*?4.清除線性表L中的所有元素,即釋放單鏈表L中所有的結(jié)點(diǎn),使之成為一個(gè)空表?*/

void?clearList(Node?*pHead)

{

Node?*pNext;????????????//定義一個(gè)與pHead相鄰節(jié)點(diǎn)

if(pHead?==?NULL)

{

printf("clearList函數(shù)執(zhí)行,鏈表為空\n");

return;

}

while(pHead-next?!=?NULL)

{

pNext?=?pHead-next;//保存下一結(jié)點(diǎn)的指針

free(pHead);

pHead?=?pNext;??????//表頭下移

}

printf("clearList函數(shù)執(zhí)行,鏈表已經(jīng)清除\n");

}

/*?5.返回單鏈表的長度?*/

int?sizeList(Node?*pHead)

{

int?size?=?0;

while(pHead?!=?NULL)

{

size++;?????????//遍歷鏈表size大小比鏈表的實(shí)際長度小1

pHead?=?pHead-next;

}

printf("sizeList函數(shù)執(zhí)行,鏈表長度?%d?\n",size);

return?size;????//鏈表的實(shí)際長度

}

/*?6.檢查單鏈表是否為空,若為空則返回1,否則返回0?*/

int?isEmptyList(Node?*pHead)

{

if(pHead?==?NULL)

{

printf("isEmptyList函數(shù)執(zhí)行,鏈表為空\n");

return?1;

}

printf("isEmptyList函數(shù)執(zhí)行,鏈表非空\n");

return?0;

}

/*?7.返回單鏈表中第pos個(gè)結(jié)點(diǎn)中的元素,若pos超出范圍,則停止程序運(yùn)行?*/

elemType?getElement(Node?*pHead,?int?pos)

{

int?i=0;

if(pos??1)

{

printf("getElement函數(shù)執(zhí)行,pos值非法\n");

return?0;

}

if(pHead?==?NULL)

{

printf("getElement函數(shù)執(zhí)行,鏈表為空\n");

return?0;

//exit(1);

}

while(pHead?!=NULL)

{

++i;

if(i?==?pos)

{

break;

}

pHead?=?pHead-next;?//移到下一結(jié)點(diǎn)

}

if(i??pos)??????????????????//鏈表長度不足則退出

{

printf("getElement函數(shù)執(zhí)行,pos值超出鏈表長度\n");

return?0;

}

return?pHead-element;

}

/*?8.從單鏈表中查找具有給定值x的第一個(gè)元素,若查找成功則返回該結(jié)點(diǎn)data域的存儲(chǔ)地址,否則返回NULL?*/

elemType?*getElemAddr(Node?*pHead,?elemType?x)

{

if(NULL?==?pHead)

{

printf("getElemAddr函數(shù)執(zhí)行,鏈表為空\n");

return?NULL;

}

if(x??0)

{

printf("getElemAddr函數(shù)執(zhí)行,給定值X不合法\n");

return?NULL;

}

while((pHead-element?!=?x)??(NULL?!=?pHead-next))?//判斷是否到鏈表末尾,以及是否存在所要找的元素

{

pHead?=?pHead-next;

}

if((pHead-element?!=?x)??(pHead?!=?NULL))

{

printf("getElemAddr函數(shù)執(zhí)行,在鏈表中未找到x值\n");

return?NULL;

}

if(pHead-element?==?x)

{

printf("getElemAddr函數(shù)執(zhí)行,元素?%d?的地址為?0x%x\n",x,(pHead-element));

}

return?(pHead-element);//返回元素的地址

}

/*?9.把單鏈表中第pos個(gè)結(jié)點(diǎn)的值修改為x的值,若修改成功返回1,否則返回0?*/

int?modifyElem(Node?*pNode,int?pos,elemType?x)

{

Node?*pHead;

pHead?=?pNode;

int?i?=?0;

if(NULL?==?pHead)

{

printf("modifyElem函數(shù)執(zhí)行,鏈表為空\n");

}

if(pos??1)

{

printf("modifyElem函數(shù)執(zhí)行,pos值非法\n");

return?0;

}

while(pHead?!=NULL)

{

++i;

if(i?==?pos)

{

break;

}

pHead?=?pHead-next;?//移到下一結(jié)點(diǎn)

}

if(i??pos)??????????????????//鏈表長度不足則退出

{

printf("modifyElem函數(shù)執(zhí)行,pos值超出鏈表長度\n");

return?0;

}

pNode?=?pHead;

pNode-element?=?x;

printf("modifyElem函數(shù)執(zhí)行\(zhòng)n");

return?1;

}

/*?10.向單鏈表的表頭插入一個(gè)元素?*/

int?insertHeadList(Node?**pNode,elemType?insertElem)

{

Node?*pInsert;

pInsert?=?(Node?*)malloc(sizeof(Node));

memset(pInsert,0,sizeof(Node));

pInsert-element?=?insertElem;

pInsert-next?=?*pNode;

*pNode?=?pInsert;

printf("insertHeadList函數(shù)執(zhí)行,向表頭插入元素成功\n");

return?1;

}

/*?11.向單鏈表的末尾添加一個(gè)元素?*/

int?insertLastList(Node?**pNode,elemType?insertElem)

{

Node?*pInsert;

Node?*pHead;

Node?*pTmp;?//定義一個(gè)臨時(shí)鏈表用來存放第一個(gè)節(jié)點(diǎn)

pHead?=?*pNode;

pTmp?=?pHead;

pInsert?=?(Node?*)malloc(sizeof(Node));?//申請(qǐng)一個(gè)新節(jié)點(diǎn)

memset(pInsert,0,sizeof(Node));

pInsert-element?=?insertElem;

while(pHead-next?!=?NULL)

{

pHead?=?pHead-next;

}

pHead-next?=?pInsert;???//將鏈表末尾節(jié)點(diǎn)的下一結(jié)點(diǎn)指向新添加的節(jié)點(diǎn)

*pNode?=?pTmp;

printf("insertLastList函數(shù)執(zhí)行,向表尾插入元素成功\n");

return?1;

}

/*?12.向單鏈表中第pos個(gè)結(jié)點(diǎn)位置插入元素為x的結(jié)點(diǎn),若插入成功返回1,否則返回0?*/

/*?13.向有序單鏈表中插入元素x結(jié)點(diǎn),使得插入后仍然有序?*/

/*?14.從單鏈表中刪除表頭結(jié)點(diǎn),并把該結(jié)點(diǎn)的值返回,若刪除失敗則停止程序運(yùn)行?*/

/*?15.從單鏈表中刪除表尾結(jié)點(diǎn)并返回它的值,若刪除失敗則停止程序運(yùn)行?*/

/*?16.從單鏈表中刪除第pos個(gè)結(jié)點(diǎn)并返回它的值,若刪除失敗則停止程序運(yùn)行?*/

/*?17.從單鏈表中刪除值為x的第一個(gè)結(jié)點(diǎn),若刪除成功則返回1,否則返回0?*/

/*?18.交換2個(gè)元素的位置?*/

/*?19.將線性表進(jìn)行快速排序?*/

/******************************************************************/

int?main()

{

Node?*pList=NULL;

int?length?=?0;

elemType?posElem;

initList(pList);???????//鏈表初始化

printList(pList);???????//遍歷鏈表,打印鏈表

pList=creatList(pList);?//創(chuàng)建鏈表

printList(pList);

sizeList(pList);????????//鏈表的長度

printList(pList);

isEmptyList(pList);?????//判斷鏈表是否為空鏈表

posElem?=?getElement(pList,3);??//獲取第三個(gè)元素,如果元素不足3個(gè),則返回0

printf("getElement函數(shù)執(zhí)行,位置?3?中的元素為?%d\n",posElem);???

printList(pList);

getElemAddr(pList,5);???//獲得元素5的地址

modifyElem(pList,4,1);??//將鏈表中位置4上的元素修改為1

printList(pList);

insertHeadList(pList,5);???//表頭插入元素12

printList(pList);

insertLastList(pList,10);??//表尾插入元素10

printList(pList);

clearList(pList);???????//清空鏈表

system("pause");

}

如何用C語言實(shí)現(xiàn)簡單的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)

使用結(jié)構(gòu)體:

typedef struct node{

int data;

struct node* next;

}Node;

就可以實(shí)現(xiàn),以上是一個(gè)單鏈表的節(jié)點(diǎn)元素,每個(gè)節(jié)點(diǎn)的next指向下一個(gè)節(jié)點(diǎn),就可以實(shí)現(xiàn)鏈?zhǔn)酱鎯?chǔ)了。遇到其他類似的問題,可以根據(jù)需要設(shè)置相應(yīng)的指針域。

用C語言編程實(shí)現(xiàn)單鏈表的基本操作

運(yùn)行結(jié)果如下:

完整代碼如下:

#includestdio.h

#includestdlib.h

typedef struct LNode

{

char data;

LNode *next;

}* LNodePtr;

LNodePtr CreateList()

{

//初始化頭節(jié)點(diǎn)

LNodePtr head = (LNodePtr)malloc(sizeof(LNode));

head-data = 0;

head-next = NULL;

LNodePtr tNode;//臨時(shí)節(jié)點(diǎn)

char data;

while(true)

{

scanf("%c",data);

if(data == '\0' || data == '\n' || data == '\r' || data == '\t')

{

continue;

}

if(data == '!')//輸入感嘆號(hào)停止插入節(jié)點(diǎn)

{

printf("輸入鏈表元素結(jié)束。\n");

break;

}

if(data = 'A' data = 'Z')

{

tNode = (LNodePtr)malloc(sizeof(LNode));

tNode-data = data; ? ? /* ?數(shù)據(jù)域賦值 ?*/

tNode-next = head-next;

head-next = tNode;

}

else

{

printf("輸入字符需為大寫字母。\n");

}

}

return head;

}

/**

加密函數(shù),加密的方式為鏈接head的所有節(jié)點(diǎn)前移offset位,但是不支持offset比鏈表的節(jié)點(diǎn)數(shù)多

@param head 鏈表頭節(jié)點(diǎn)

@param offset 節(jié)點(diǎn)前移的位數(shù)

*/

void EncryptList(LNodePtr head,int offset)

{

LNodePtr tNode = head-next;

int i;

for(i = 0; i offset; i++)

{

if(tNode-next != NULL)

{

tNode = tNode-next;

}

}

if(i == offset)

{

LNodePtr newHead = tNode;

LNodePtr tail = tNode;

while (tail-next != NULL)

{

tail = tail-next;

}

tail-next = head-next;

while(tNode-next != NULL)

{

if(tNode-next != newHead)

{

tNode = tNode-next;

}

else

{

tNode-next = NULL;

break;

}

}

head-next = newHead;

}

else

{

printf("不支持移動(dòng)");

}

}

void ListPrint(LNodePtr head)

{

if(head-next != NULL)

{

LNodePtr tNode = head-next;

while (tNode-next != NULL)

{

printf("%c ",tNode-data);

tNode = tNode-next;

}

printf("%c",tNode-data);

}

}

int main()

{

LNodePtr list = CreateList();

printf("\n創(chuàng)建的鏈表如下:\n");

ListPrint(list);

EncryptList(list,3);

printf("\n所有節(jié)點(diǎn)前移了3位之后的鏈表如下:\n");

ListPrint(list);

printf("\n");

return 0;

}

如果看不懂代碼可以問我


當(dāng)前題目:c語言實(shí)現(xiàn)鏈?zhǔn)胶瘮?shù)操作 C語言鏈表函數(shù)
網(wǎng)址分享:http://weahome.cn/article/hjgdod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部