《c语言数据结构双向链表.docx》由会员分享,可在线阅读,更多相关《c语言数据结构双向链表.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据结构上机实验课后练习报告姓名:冯天明学号:班级:通信1412015年9月28日星期一实验三:编写一个程序,实现双链表的各种基本运算,并在此基础上设计一个主程序完成 以下功能。1 .初始化双链表L.依次采用尾插法或者头插法插入元素a,b,c,d,e2 .输出双链表L.输出双链表的长度3 .判断双链表是否为空.输出双链表的第四个元素4 .输出元素a的位置.在第三个元素位置插入元素f5 .输出双链表L.删除双链表L的第四个元素6 .输出双链表L.释放双链表#include#include#includedefine OK 0# define ERROR -2dcfinc OVERFLOW-1ty
2、pedef char ElemType;typedef struct DuLNode /定义双向链表ElemType data;DuLNode *prior;DuLNode *next; DuLNode,*DuLinkList;void InitDuLinkList( DuLinkList h) 创立一个空表h = new DuLNode;/(DuLinkList)malloc(sizeof(DuLNode); h-next = h-prior;void CreateDuLinkList(DuLinkList h,int n)/初始化链表DuLNode *p,*q;InitDuLinkList
3、(h);q = h;printf(输入个元素:nM,n);for(int i = 0;idata);fflush(stdin);q-next = p;p-prior = q;q = p;)q-next = NULL;int DestroyList(DuLinkList L) 销毁链表(DuLNode *p=L ;while(L-next)直到达最后一个节点p = L-next;L-next = p-next;free( p);)L-prior =NULL;return OK;int ListEmpty(DuLinkList L)return (L-ncxt = NULL& L-prior =
4、NULL);DuLNode *GetElem(DuLinkList h,int i) 获取对应节点的元素IDuLNode *p;p = h-next;intj = 1;while(p&jnext;+j;)if(j = i)return p;elsereturn NULL;int DuLinkListInser(DuLinkList h,int i,ElemType e)f IDuLNode *p,*s;p = GetElem(h,i-l);if(!p) return ERROR;s = (DuLinkList)malloc(sizeof(DuLNode);s-data = e;if(p-nex
5、t)如果插入的不是尾节点p-next-prior = s;s-next = p-next;s-prior = p;p-ncxt = s;else插入的是尾节点s-next = p-next;p-ncxt = s;s-prior = p;return OK;)int DeleListElem(DuLinkList L ,int i)(DuLNode *p,*q;p = GetElem(L,i-l);if(!p) return ERROR; 删除的元素不存在if(p-next)如果删除的不是最后一个节点(q = p-next;q-next-prior = p;p-next = q-next;) e
6、lse q = p-next;p-next = NULL;free( q);return OK;|int LocateElcm(DuLinkList L,ElcmTypc c)Iint loca = 0;DuLNode *p;p = L-next;if(P) (while( p != L) +loca;if(p & p-data = c) 元素匹配,返回节点 return loca;if(!p)return ERROR;p = p-next; return ERROR;int ListLength(DuLinkList L)DuLNode *p = L;int i = 0;while(p-ne
7、xt) 遍历链表,记录节点数ip = p-next;+i;return i;void DisplayList(DuLinkList L)(DuLNode *p;p = L-next;if(ListEmpty(L)(printf(链表为空! n”);return ;fprintf(“链表的内容为while(p)遍历链表,输出节点data(printf(n%4cH,p-data);p = p-next;int main() DuLNode L,*temp;intloca;CreateDuLinkList(&L,5);初始化链表DisplayList(&L);/输出链表if(ListEmpty(&L
8、) printf(链表为空!n“); elseiprintf(链表不为空!n”);temp = GetElem(&L,4);获取第四个位置的元素printf(链表第四个元素是:%cn,temp-data);loca = LocateElcmC&L/a1);printf(元素a在链表的第d个位置nJoca); 寻找a元素在链 表的某个节点printf(在第三个位置插入元素f:“);DuLinkListInser(&L,3,*f);插入元素f在第三个位置DisplayList(&L);DeleListElem( &L ,4);删除第四个节点的元素DisplayList(&L);DestroyList(&L);销毁链表if(ListEmpty(&L) ( printf(链表为空!n“); else (printfC链表不为空!n“);return OK;)